Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL] Zaznaczenie wybranych kategorii z multiple
Kshyhoo
post
Post #1





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




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ł?

Ten post edytował Kshyhoo 29.10.2013, 10:32:10
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #2





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


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.
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #3





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




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. ?>


Ten post edytował Kshyhoo 31.10.2013, 11:25:18
Go to the top of the page
+Quote Post
nospor
post
Post #4





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




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
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #5





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




  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...
Go to the top of the page
+Quote Post
nospor
post
Post #6





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




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.
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #7





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




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. ?>
Go to the top of the page
+Quote Post
nospor
post
Post #8





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




Wywal wkoncu te implode(",", $selected);..... przeciez to niczemu nie sluzy a nie daj boze jeszcze kiedys zrobisz:
$selected = implode(",", $selected);
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #9





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




No tak, chyba zaczynam myśleć jak humanista a nie jak programista (IMG:style_emoticons/default/smile.gif) Wiek robi swoje ;p
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 18.09.2025 - 10:31