![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 62 Pomógł: 0 Dołączył: 16.12.2005 Ostrzeżenie: (10%) ![]() ![]() |
Witam
Próbuje zrobić dwa pola select, w którym zawartość drugiego zmienia się w zależności od pierwszego. Skorzystałem z pomocy tego forum i przerobiłem skrypcik na moje potrzeby który działa. Chciałbym dokonać w nim jednak pewnej (pewnie niewielkiej zmiany) ale nie wiem jak. Otóż Zawartość dla każdego pola select pobierana jest z dwóch różnych tabel (zrzut dwóch tabel poniżej). W jednej tabeli jest kategoria główna, w drugiej podkategoria dla danych kategori. Czasami jednak kategoria główna nie ma żadnej podkategorii i tu potrzebuję pomocy bo chciałbym zrobić tak żeby w takim przypadku drugi select poprostu zniknął, a jeśłi będzie jakaś podkategoria to żeby się pojawił (tylko że pojawienie spowinno byc razem z tabelką w html) bo docelowo będę chciał zrobić żeby wstawiał mi się wiersz. w tabeli. Jeśli pomoglibyście mi różnież przy optymalizacji kodu to też byłbym wdzięczny bo raczej chyba nie jest on za bardzo wydajny. Dziękuję za jakiekolwiek próby pomocy. Pozdrawiam zrzut tabel
mój skrypt [php] $url = 'localhost'; $login = ''; $pass = ''; $baza =''; $polaczenie=mysql_connect($url,$login,$pass); $wybor=mysql_select_db($baza); $table_name2='kategoria_programowii'; $table_name='kategoria_programow'; ?> <form name="doublecombo"> <p><select name="example" size="1" onChange="redirect(this.options.selectedIndex)"> <?php $sql_I = "SELECT * FROM $table_name"; $result = @mysql_query($sql_I); echo "<option selected value=''>wybierz</option>"; while ($row3 = mysql_fetch_array($result)) { $wartosc_1=$row3['Nazwa']; echo "<option value='$wartosc_1'>$wartosc_1</option>"; } ?> </select><br><br> <select name="stage2" size="1"> </select><br> <script> <!-- var groups=document.doublecombo.example.options.length var group=new Array(groups) for (i=0; i<groups; i++) group[i]=new Array() group[0][0]=new Option("","BRAK") <?php $sql_I = "SELECT * FROM $table_name"; $result = mysql_query($sql_I); $licznik1=1; while ($row3 = mysql_fetch_array($result)) { $wartosc_1=$row3['Nazwa']; $licznik2=0; $sql_III = "SELECT * FROM $table_name2 where Nazwa_glowna like '$wartosc_1'"; $result4 = mysql_query($sql_III); $sql_IIV = "SELECT count(*)ilosc FROM $table_name2 where Nazwa_glowna like '$wartosc_1'"; $resultIIV = mysql_query($sql_IIV); $row41=mysql_fetch_array($resultIIV); if ($row41['ilosc']) { while ($row41 = mysql_fetch_array($result4)) { if ($licznik2==0) { ?> group[<?php echo $licznik1;?>][<?php echo $licznik2;?>]=new Option("Wybierz") <?php $licznik2++; } else { $wartosci3=$row41['Podkategoria']; ?> group[<?php echo $licznik1;?>][<?php echo $licznik2;?>]=new Option(" <?php echo $wartosci3;?>") <?php $licznik2++; } } } else { $wartosci3="Brak Podkategorii"; ?> group[<?php echo $licznik1;?>][<?php echo $licznik2;?>]=new Option(" <?php echo $wartosci3;?>") <?php $licznik2++; } $licznik1++; } ?> var temp=document.doublecombo.stage2 function redirect(x){ for (m=temp.options.length-1;m>0;m--) temp.options[m]=null for (i=0;i<group[x].length;i++){ temp.options[i]=new Option(group[x][i].text,group[x][i].value) } temp.options[0].selected=true } function go(){ location=temp.options[temp.selectedIndex].value } //--> </script> |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 252 Pomógł: 2 Dołączył: 4.12.2004 Skąd: Skierniewice Ostrzeżenie: (10%) ![]() ![]() |
No i to właśnie tak będzie działać. Masz dwie tabele w bazie danych, jedno co mi się rzuciło w oczy to nie podobaja mi się sposób w jaki wrzucasz tam dane. Wg mnie lepiej by było
--table_kategorie-- id_kategorii nazwa -- table_podkategorie -- id_podkategorii id_kategorii (czyli kategorii nadrzędnej) nazwa teraz tak, do jednego selecta wrzucasz wynik zapytania
Na tej podstawie robisz kod teraz należy napisać funkcję java script
Jej zadaniem jest wysłanie do pliku pobierz2.php numeru kategorii którą wybierzerz z listy. Jest to fragment kody który prezentowałem w tym wątku , przejrzyj sobie może ci się nieco rozjaśni. W pliku pobierz2 php pobierasz id które przesłałeś za pomocą funkcji JS np. tak
i Dajesz kolejne zapytanie:
W ten sposób otzrymujesz kolejną porcję danych, wrzucasz do drugiego selecta i to wszystko. W wątku który podałem wyżej opisałem dokładnie co i jak. chociaż na nieco innym przyładzie. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 15.10.2025 - 23:40 |