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


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

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


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

"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
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);


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

"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
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 smile.gif Wiek robi swoje ;p


--------------------
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 Aktualny czas: 22.08.2025 - 05:47