Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z auto-zaznaczeniem checkboxów
Forum PHP.pl > Forum > Przedszkole
camelx
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. ?>
nospor
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
camelx
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.
nospor
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. ?>
camelx
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. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.