Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Zaznaczenie wybranych kategorii z multiple
Forum PHP.pl > Forum > Przedszkole
Kshyhoo
Siedzę dzień i nie mogę wymyśleć, jak zaznaczyć wybrane i zapisane kategorie z multiple. Nie wiem, jak do kodu:
  1. $result = dbquery("SELECT kat_id, kat_kategoria FROM kategorie WHERE kat_cat='0' ORDER BY kat_order");
  2. if (dbrows($result) != 0) {
  3. while ($data = dbarray($result)) {
  4. $result2 = dbquery("SELECT kat_id, kat_kategoria FROM kategorie WHERE kat_cat='".$data['kat_id']."' ORDER BY kat_order");
  5. if (dbrows($result2) != 0) {
  6. $kat_list .= "<optgroup label='".$data['kat_kategoria']."'>\r\n";
  7. while ($data2 = dbarray($result2)) {
  8. // WYBÓR KATEGORII DO ZAZNACZENIA
  9. if ($kat_wyb['id_kat'] == $data2['kat_id']) {
  10. $sel = " selected";
  11. } else {
  12. $sel = "";
  13. }
  14. $kat_list .= "<option value='".$data2['kat_id']."'$sel>".$data2['kat_kategoria']."</option>\r\n";
  15. }
  16. $kat_list .= "</optgroup>\r\n";
  17. }
  18. }
  19. }
  20. echo '<select name="kat_id[]" id="kat" class="textbox" style="width: 150px" size="5" multiple>'.$kat_list.'</select>';

wpleść ten kod:
  1. $result3 = dbquery("SELECT * FROM tut_kat WHERE id_tut='$tut_id'");
  2. while ($row = mysql_fetch_array($result3)) {
  3. $kat_wyb = array( 'id_kat' => $row['id_kat']);
  4. }

Podrzuci mi ktoś pomysł?
SmokAnalog
Matko jedyna, jaki paskudny kod. Kolego, siedzisz w PHP od tak dawna, niby pomogłeś ponad 100 osobom, a Twój kod jest na poziomie osoby piszącej w PHP od 3 miesięcy.
  • Brak składni alternatywnej
  • Brak jakiejś sensownej biblioteki do współpracy z bazą danych
  • \r\n - yeah!
  • Kod w cudzysłowach
  • Nazewnictwo zmiennych i pól w bazie jak u pierwszoklasisty
  • Amatorska logika: zbierasz HTML zawierający zawartość <select> do kupy, by potem go połączyć z listą - WTF?
  • O drugim bloku kodu już nawet się nie wypowiem, bo mi ręce opadły

A odpowiadając na Twoje pytanie, to zbierz do tablicy wszystkie wybrane kategorie (tylko w jakiś sensowniejszy sposób niż teraz, wystarczą same ID luzem) i przy tej Twojej boskiej konstrukcji wypluwającej listę sprawdzaj czy w tej tablicy znajduje się dany identyfikator.
Kshyhoo
Kod nie jest mój, znalazłem go gdzieś w necie i zaadaptowałem dla swoich potrzeb... Jestem amatorem i na takim poziomie pewnie pozostanę. Każda część kodu okupiona jest wielogodzinnym, jeżeli nie wielodniowym kopaniem w necie i główkowaniem... więc nie dziw się. A moja pomoc innym to raczej na raczkującym poziomie - nazbierało się przez te 8 lat na Forum.
Jeżeli umiesz lepiej, pokaż na co Cie stać ;P

  1. <?php
  2. include('../config.php');
  3. include('../db_function.php');
  4.  
  5. $tut_id = 1609;
  6.  
  7. /* ZAZNACZONE */
  8. $result3 = dbquery("SELECT id_kat FROM tut_kat WHERE id_tut='$tut_id'");
  9. $selected = array();
  10. while($rekord3 = mysql_fetch_assoc($result3)) {
  11. $selected[] = $rekord3['id_kat'];
  12. }
  13. implode(",", $selected);
  14.  
  15. $result = dbquery("SELECT kat_id, kat_kategoria FROM kategorie WHERE kat_cat='0' ORDER BY kat_order");
  16. if (dbrows($result) != 0) {
  17. while ($data = dbarray($result)) {
  18.  
  19. $result2 = dbquery("SELECT kat_id, kat_kategoria FROM kategorie WHERE kat_cat='".$data['kat_id']."' ORDER BY kat_order");
  20. if (dbrows($result2) != 0) {
  21. $kat_list .= "<optgroup label='".$data['kat_kategoria']."'>\n";
  22. while ($data2 = dbarray($result2)) {
  23.  
  24. /* ZAZNACZONE */
  25. foreach( $selected as $key=>$option ) {
  26. $select = in_array( $option, $selected ) ? ' selected' : null;
  27.  
  28. $kat_list .= '<option value="'.$data2['kat_id'].'"'.$select.'>'.$data2['kat_kategoria'].'</option>'."\n";
  29. }
  30.  
  31. }
  32. $kat_list .= "</optgroup>\n";
  33. }
  34. }
  35. }
  36.  
  37. echo '<select name="kat_id[]" id="kat" class="textbox" style="width: 150px" size="25" multiple>'.$kat_list.'</select>';
  38. ?>
nospor
implode(",", $selected);
Po co to?

Patrzyles, czy $selected jest poprawną tablicą idkow?

$select = in_array( $option, $selected ) ? ' selected' : null;
Nigdzie nie widze, bys gdziekolwiek ustawil $option, ktore tutaj sprawdzasz.

Skoro do OPTION wstawiasz $data2['kat_id'] to wlasnie $data2['kat_id'] masz sprawdzac czy jest w tablicy $selected
Kshyhoo
  1. implode(",", $selected);

Daje mi: 3,5,9,11, czyli ID kategorii do zaznaczenia.
Tym kodem:
  1. foreach( $selected as $key=>$option ) {
  2. $select = in_array( $option, $selected ) ? ' selected' : null;
  3. $kat_list .= '<option value="'.$data2['kat_id'].'"'.$select.'>'.$data2['kat_kategoria'].'</option>'."\n";
  4. }

sprawdzam tablicę, czy masują do siebie. Może jakaś poroczność jasna mnie trapi, że nie widzę, gdzie błąd robię.

PS. Jeżeli robię to bez optgroup, kod mi działa poprawnie...
nospor
Lecisz FOREACH po $selected i sprawdzasz czy to co w $selected jest w $selected? To tak jakbys wyjal z pudelka guzik i sprawdzal, czy on byl w tym pudelku. No przeciez byl, skoro go z niego wyjales.....

W $seleceted masz trzymasz idki, ktore chcesz zaznaczyc.
W option masz generowac opcje dostepne dla usera a przy okazji sprawdzac, czy ktoras z opcji jest w $selected i jesli jest to masz ja zaznaczyc.
Kshyhoo
Działa! Okazuje się, że zbyt komplikowałem sprawę. Dzięki Nospor za nakierowanie.
  1. <?php
  2. include('../config.php');
  3. include('../db_function.php');
  4.  
  5. $tut_id = 1609;
  6.  
  7. /* ZAZNACZONE */
  8. $result3 = dbquery("SELECT id_kat FROM tut_kat WHERE id_tut='$tut_id'");
  9. $selected = array();
  10. while($rekord3 = mysql_fetch_assoc($result3)) {
  11. $selected[] = $rekord3['id_kat'];
  12. }
  13. implode(",", $selected);
  14.  
  15. $result = dbquery("SELECT kat_id, kat_kategoria FROM kategorie WHERE kat_cat='0' ORDER BY kat_order");
  16. if (dbrows($result) != 0) {
  17. while ($data = dbarray($result)) {
  18.  
  19. $result2 = dbquery("SELECT kat_id, kat_kategoria FROM kategorie WHERE kat_cat='".$data['kat_id']."' ORDER BY kat_order");
  20. if (dbrows($result2) != 0) {
  21. $kat_list .= "<optgroup label='".$data['kat_kategoria']."'>\n";
  22. while ($data2 = dbarray($result2)) {
  23.  
  24. $select = in_array( $data2['kat_id'], $selected ) ? ' selected' : null;
  25. $kat_list .= '<option value="'.$data2['kat_id'].'"'.$select.'>'.$data2['kat_kategoria'].'</option>'."\n";
  26.  
  27. }
  28. $kat_list .= "</optgroup>\n";
  29. }
  30. }
  31. }
  32.  
  33. echo '<select name="kat_id[]" id="kat" class="textbox" style="width: 150px" size="25" multiple>'.$kat_list.'</select>';
  34. ?>
nospor
Wywal wkoncu te implode(",", $selected);..... przeciez to niczemu nie sluzy a nie daj boze jeszcze kiedys zrobisz:
$selected = implode(",", $selected);
Kshyhoo
No tak, chyba zaczynam myśleć jak humanista a nie jak programista smile.gif Wiek robi swoje ;p
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.