![]() |
![]() |
![]()
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%) ![]() ![]() |
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ął W pliku php do którego wysyłasz żądanie, sprawdź ile rekordów masz zwrócnych po zapytaniu w którym pobierasz podkategorie, jeśli jest zero to wyczyść pole w które wstawiasz dane wynikowe za pomocą innerHTMl. -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 62 Pomógł: 0 Dołączył: 16.12.2005 Ostrzeżenie: (10%) ![]() ![]() |
ale szczerze powiedziawszy ja się nie znam na JS a zmiana podkategorii w select odbywa się bez przładowania strony za pomocą JS
|
|
|
![]()
Post
#4
|
|
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. -------------------- |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 62 Pomógł: 0 Dołączył: 16.12.2005 Ostrzeżenie: (10%) ![]() ![]() |
czyli co? z tego co rozumiem zawartość drugiego selecta generowana jest przez zewnętrzny plik pobierz2.php który dołączony zpstaje w głównej stronie ?
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 252 Pomógł: 2 Dołączył: 4.12.2004 Skąd: Skierniewice Ostrzeżenie: (10%) ![]() ![]() |
nie do końca, pliku nie dołączasz tylko wysyłasz do niego jakby żadanie o pewne dane, w tym przypadku są to podkategorie kategorii którą wybierzesz z listy. Wynik jak i całe żądanie działa na ajaxie i dlatego nie ma przeładowania strony. W samym JS nie dobierzesz się do bazy danych bo ona działa na serwerze a js w przeglądarce.
-------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.07.2025 - 10:15 |