Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z auto-zaznaczeniem checkboxów, ...gdy wpis jest w kilku kategoriach
camelx
post 13.01.2006, 12:41:36
Post #1





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 14.06.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Mam mały problem z systemem newsów. Można w nim dodawać wpis do kilku kategorii i chcę, żeby podczas edycji wpisu automatycznie zaznaczały się odpowiednie chceckboxy z kategoriami. Niestety gdy dadam wpis do dwóch kategorii w ten sposób:
Kod
[ ] kategoria 1
[x] druga
[ ] trzecia
[x] ostatnia
to podczas edycji wyświetla mi się to tak:
Kod
[ ] kategoria 1
[ ] druga
[ ] trzecia
[x] ostatnia
Zaznaczona jest tylko ostatnia kategoria a powinna zaznaczyć się także 'druga'.

Być może to jest jakaś drobnostka, ale był bym bardzo wdzięczny za pomoc w naprawienu tego błędu, bo siedzę nad tym już drugi dzień smile.gif

Poniżej znajduje się (cała) funkcja wyświetlająca listę kategorii. Wrzuciłem całą, żeby nie było żadnych problemów... Miejsce w którym znajduje się kod odpowiedzielny z zaznaczanie chceckboxów zaznaczone jest //komentarzem.
  1. <?php
  2. function make_categories ($catDisplay = 'menu')
  3. {
  4. global $mresult, $e;
  5.  
  6. $sql = "SELECT * FROM ". CATS_TABLE ." ORDER BY cat_id";
  7. if ( !($qresult = mysql_query($sql, $mresult)) ) error ('Nie mozna wybrac kategorii z bazy');
  8. while ($cat = mysql_fetch_array($qresult))
  9. {
  10. if ($catDisplay == 'menu')
  11. {
  12. $cat_list .= links ('?c='.$cat['cat_id'], $cat['cat_desc']).'
  13. <hr />';
  14. }
  15. elseif ($catDisplay == 'list')
  16. {
  17. $sql2 = mysql_query("SELECT * FROM ".N2C_TABLE." WHERE news_id = '$e' ");
  18. while ($ncat = mysql_fetch_array($sql2))
  19. {
  20. // tu tkwi caly problem!
  21. if ( $cat['cat_id'] == $ncat['cat_id'] ) $cat_sel = 'checked="checked"';
  22. else $cat_sel = '';
  23. }
  24.  
  25. $cat_list .= '<input type="checkbox" name="cat[]" style="display: inline;" value="'.$cat['cat_id'].'" '.$cat_sel.' /> '.$cat['cat_desc'].'<br />';
  26. }
  27. elseif ($catDisplay == 'config')
  28. {
  29. $cat_list .= '<input type="checkbox" name="cat[]" style="display: inline;" value="'.$cat['cat_id'].'" /> '.$cat['cat_desc'].'<br />';
  30. }
  31. }
  32. return $cat_list;
  33. }
  34. ?>


--------------------
windows nie jest wirusem... wirusy coś robią :)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
nospor
post 13.01.2006, 13:07:18
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




dla kazdej kategori lecisz na na nowo do bazy i pobierasz ciagle te same zaznaczone kategorie. zero optymalnosci.
PObierz raz na poczatku zaznaczone kategorie do tablicy, a potem sprawdzaj przy uzyciu in_array(), czy dana kategoria jest na liscie zaznaczonych.

przy okazji tez sprawdzisz sobie czy oby na pewno w zaznaczonych masz wszystko to co chcesz, bo moze twoim problemem jest wlasnie zly wpis w bazie zaznaczonych


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
camelx
post 13.01.2006, 13:45:10
Post #3





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 14.06.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


No z optymalnością to rzeczywiście nie ma nic wspólnego smile.gif

zrobiłem tak:
  1. <?php
  2. if ( in_array( $cat['cat_id'], $ncatid ) ) $cat_sel = 'checked="checked"';
  3. else $cat_sel = '';
  4. ?>
ale nadal nie działa...

Zapytanie $sql2 zrobiłem przed "while ($cat = mysql_fetch_array($qresult))".
Czy mógł byś mi napisać tylko jak mam uzyskać $ncatid? Co zrobić, żeby znalazła się w niej tablica z kategoriami? Albo poprostu, jeśli możesz, napisz jak Ty rozwiązał byś ten problem, bo ja jakoś nie bardzo umiem posługiwać się tablicami... smile.gif
Będę bardzo wdzięczny za pomoc.


--------------------
windows nie jest wirusem... wirusy coś robią :)
Go to the top of the page
+Quote Post
nospor
post 13.01.2006, 13:57:04
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




ten drugi kodzik co napisales jest poprawny, pod warunkiem, ze $ncatid jest tablicą o wartosciach bedącymi id zaznaczonych categorii. Rozumiem ze ją stworzyleś. Czyli ze :
  1. <?php
  2.  
  3. $ncatid = array();
  4. //tu zapytanie
  5. //tu wykonujesz
  6. while (tu pobierasz kolejne wiersze z zapytania){
  7. $ncatid[] = //tu wstawiasz id zaznaczonej kategorii
  8. }
  9. //wyswietls se jeszcze zeby sprawdzic czy są wszystkie kategorie
  10. print_r($ncatid);
  11.  
  12. ?>


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
camelx
post 13.01.2006, 14:07:15
Post #5





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 14.06.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Ok, wszystko już działa. Wielkie dzięki za pomoc smile.gif
Wrzuciłem $ncatid = array(); do "while" i dlatego nie działało...

Oto cały kod, może komuś sie kiedyś przyda:
  1. <?php
  2. function make_categories ($catDisplay = 'menu')
  3. {
  4. global $mresult, $e;
  5.  
  6. $sql = "SELECT * FROM ". CATS_TABLE ." ORDER BY cat_id";
  7. if ( !($qresult = mysql_query($sql, $mresult)) ) error ('Nie mozna wybrac kategorii z bazy');
  8.  
  9. $ncatid = array();
  10. $sql2 = mysql_query("SELECT * FROM ".N2C_TABLE." WHERE news_id = '$e' ");
  11. while ($ncat = mysql_fetch_array($sql2))
  12. {
  13. $ncatid[] = $ncat['cat_id'];
  14. }
  15. //print_r ($ncatid);
  16.  
  17. while ($cat = mysql_fetch_array($qresult))
  18. {
  19. if ($catDisplay == 'menu')
  20. {
  21. $cat_list .= links ('?c='.$cat['cat_id'], $cat['cat_desc']).'
  22. <hr />';
  23. }
  24. elseif ($catDisplay == 'list')
  25. {
  26. if ( in_array( $cat['cat_id'], $ncatid ) ) $cat_sel = 'checked="checked"';
  27. else $cat_sel = '';
  28.  
  29. $cat_list .= '<input type="checkbox" name="cat[]" style="display: inline;" value="'.$cat['cat_id'].'" '.$cat_sel.' /> '.$cat['cat_desc'].'<br />';
  30. }
  31. elseif ($catDisplay == 'config')
  32. {
  33. $cat_list .= '<input type="checkbox" name="cat[]" style="display: inline;" value="'.$cat['cat_id'].'" /> '.$cat['cat_desc'].'<br />';
  34. }
  35. }
  36. return $cat_list;
  37. }
  38. ?>


--------------------
windows nie jest wirusem... wirusy coś robią :)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 10:39