Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: 2 selecty - drugi zalezny od pierwszego
Forum PHP.pl > Forum > Przedszkole
AxZx
witam

jak zrobic takie cos ze mam jeden select z branzami
i po wybraniu odpowiedniej branzy pojawia sie druga lista rozwijana z podbranzami ktore sa przypisane do tej branzy?

mam juz 2 tabele
jedna z branzami
a w drugiej mam podbranze i id branzy do ktorej sa przypisane

ktos cos poleci?
pytalem szukalem i nic nie znalazlem konkretnego

moze podpowiedzcie od czego zaczac?
czy zrobic to tak ze pobrac wszystkie dane i poprzez JS wyswietlic odpowiednia?
takie rozwiazanie nie pasuje mi zbytnio wolalbym pobierac tylko te podbranze ktore potrzeba
ale nie wiem jak zrobic wlasnie to wybieranie ze jak wybierze branze to strona przeladowuje sie i wyswietlaja odpowiednie podbranze.

z gory dzieki za jakies sugestie
jest to sprawa dosyc powazna.
marast78
Użyj JOIN'a powinno wystarczyć, szkoda że nie umieściłeś tu struktur tych tabell
AxZx
a co da JOIN?

no moge umiescic wazniejsze dane

BRANZA:
id | branza

PODBRANZA:
id | podbranza | branza_id

  1. <tr>
  2. <td><?=$menu['edytuj'][11]?></td><!-- branza //-->
  3. <td><select name="branza" class="pole" style="width:199px;" onchange="window.location='?nav=firma_dodaj'"><?
  4. $zapytanie2 = $sql->query("SELECT branza_id, branza_pl FROM targi_branza");
  5. while($dane2 = $sql->fetch_row($zapytanie2)){
  6. ?><option value="<?=$dane2[0]?><?=($_GET['branza_id'] == $dane2[0]) ? 'selected="selected"' : '' ?>
  7. <?=($dane_temp['branza_id'] == $dane2[0]) ? 'selected="selected"' : '' ?>><?=$dane2[1]?></option><?
  8. }
  9. ?></select></td>
  10. </tr>
  11. <tr>
  12. <td><?=$menu['edytuj'][29]?></td><!-- podbranza //-->
  13. <td><select name="podbranza" class="pole" style="width:199px;"><?
  14.  
  15. if(isset($_GET['branza_id']) && is_numeric($_GET['branza_id'])){
  16.  
  17. $zapytanie3 = $sql->query("SELECT branza2_id, branza2_pl FROM targi_branza2 WHERE branza_id = ".intval($_GET['branza_id']));
  18.  
  19. if($sql->num_rows($zapytanie3) > 0){
  20. while($dane3 = $sql->fetch_row($zapytanie3)){
  21. ?><option value="<?=$dane3[0]?><?=($dane_temp['branza2_id'] == $dane3[0]) ? 'selected="selected"' : '' ?>><?=$dane3[1]?></option><?
  22. }
  23. }else{
  24. ?><option value="0">brak podbranż</option><?
  25. }
  26. }else{
  27. ?><option value="0">brak podbranż</option><?
  28. }
  29. ?></select></td>
  30. </tr>
cornholio666
Kiedys cos takiego zrobilem. zobacz tu http://forum.php.pl/index.php?showtopic=24481&hl= .
yalus
ja bym to zrobil jeszcze inaczej,

jezeli elementow w glownym polu select nie jest za duzo
i tą druga rozwijalna liste chcialbys generowac w 'locie' to ja bym zrezygnowal calkowicie z php i zastosowal prosciutki skrypt w JS

ogolnie to wyglada tak:
tworzysz wszysttki pola select i je ukrywasz (oprocz tego pierwszego)
i teraz w zaleznosci od tego co wybierzesz w pierwszym polu pokazujesz zalezne od niego drugi pole select

zda to egzamin jezeli elementow w glownym polu nie bedzie za duzo gdyz do kazdego elementu musisz przypozadkowac nastepna lista select,
jezeli jest ich duzo to faktycznie uzyj php - bedzie najwydajniej

pozdrawiam yalus
NoiseMc
Do tego nadawałby się AJAX. Nie znam za dobrze tej technologii ale działałoby to mniej więcej na tej zasadzie:

Przy pierwszym wywołaniu generujesz pierwszego selecta, zaznaczasz jakiśtam domyślny option i dla tego zaznaczonego generujesz drugiego selecta wszystko za pomocą php.

W momencie gdy wybierzesz jakąś opcję z pierwszego selecta odpalasz funkcję JavaScript która za pomocą XMLHttpRequest wywołuje skrypt php i pobiera dane dla drugiego selecta jako XML (oczywiście skrypt php musi pobrać odpowiednie dane do drugiego selecta i zwrócić je jako XML).
Gdy już dostaniesz XML - a czyścisz JS - em całego drugiego selecta i budujesz go od nowa na podstawie danych, które dostałeś.

To był taki ogólny opis nie próbowałem nigdy tego robić ale wydaje mi się, że właśnie na tej zasadzie się robi takie rzeczy jeżeli chcesz uniknąć przeładowywania strony za każdą zmianą w pierwszym select.

W linku poleconym przez cornholio666 znajdziesz pomoc jak zbudować selecta z poziomi JS.

Tutaj więcej info o AJAX
AxZx
dzieki za sugestie

udalo mi sie zrobic takie 2 selecty za pomoca JS, przeladowywanie strony i w linku numer branzy - na jego podstawie pobieranie podbranz z bazy i stworzenie selecta z tymi podbranzami

ale troche mi sie to nie podoba, bo jak ktos wypelni juz caly formularz i koncu bedzie chcial wybrac cos z tego selecta to wszystkie dane sa usuwane z formularza
tak byc nie moze.
a z tym AJAXem to chyba raczej trudniejsza sprawa jest


no chyba ze napisze wyrazny komunikat: najpierw wybierz cos z selecta a dopiero pozniej wypelniaj dormularz smile.gif)))
cornholio666
tu http://webmaster.helion.pl/kurshtml/skrypt/doubmenu.htm jest dokladnie to o czym mowisz... jezeli masz malo danych uzyj tego skryptu a jak koniecznie chcesz korzystac z bazy danych to wygeneruj odpowiedni skrypt JS za pomoca php na podstawie skryptu ktory znajduje sie pod powyzszym linkiem. Czyli zrob tak jak ci napisalem wczesniej
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.