Jak wykonać podwójne, rozwijane pole wyboru typu lista, w którym zawartość drugiego pola zależy od wyboru wartości w pierwszym


[MySQL][PHP] Jak wykonać podwójne, rozwijane pole wyboru typu lista, w którym zawartość drugiego pola zależy od wyboru wartości w pierwszym?

0x01 graphic

Chcesz stworzyć formularz z dwoma, rozwijanymi polami wyboru. Wybór opcji w jednym powoduje zmianę wartości do wyboru w drugim. Przy wybraniu jakiegoś tematu z pierwszej listy, w drugiej dostaje się tylko opcje należące do tej kategorii.

0x01 graphic

Sposób wykonania takiego formularza opisałem dokładnie w osobnej poradzie. Tutaj pokażę, jak wypełnić pola wyboru danymi pobranymi wprost z tabeli, z bazy danych.

Załóżmy że w pierwszym polu znajdzie się marka samochodu, a w drugim model. Dopiero po wybraniu tych dwóch wartości nastąpi wyszukiwanie roczników tych modeli dostępnych chociażby w potencjalnym serwisie ogłoszeniowym. Wykorzystajmy do prześledzenia mechanizmu uzupełniania pól prostą tabelę o nazwie auta. Niech jej zawartość prezentuje się następująco:

+-------+---------+------+

| marka | model | rok |

+-------+---------+------+

| Ford | Escort | 1998 |

| Ford | Escort | 1999 |

| Ford | Sierra | 1990 |

| Opel | Corsa | 1996 |

| Opel | Corsa | 1993 |

| Opel | Corsa | 1995 |

| Opel | Vectra | 1999 |

| Opel | Vectra | 1998 |

| Opel | Astra | 1999 |

| Fiat | Punto | 2001 |

| Fiat | Punto | 2001 |

| Fiat | Brava | 2001 |

| Fiat | Tipo | 1992 |

| Fiat | Siena | 1998 |

| Fiat | Siena | 1997 |

| Fiat | Punto | 2002 |

| Opel | Vectra | 2001 |

| Ford | Sierra | 1989 |

| Ford | Mustang | 1994 |

| Ford | Escort | 1996 |

+-------+---------+------+

Aby uzupełnić pola wyboru trzeba wyciągnąć wszystkie marki w taki sposób, aby nie powtarzały się, co zapewni nam polecenie DISTINCT(). Gdy mamy już marki, wystarczy sprawdzić ile ich jest.

W pętli marki dodawane są do tablicy $tmarki, a na podstawie nazwy marki pobierane są modele tej marki i też w pętli dodawane są do tablicy dwuwymiarowej $tmodele. W ten sposób mamy marki i modele w osobnych tablicach. Możemy rozłączyć się już z bazą danych.

Dalsza część skryptu to wypełnienie formularza danymi, czyli odczytanie tabel z marką oraz modelem i w pętli wstawienie tych danych do gotowego skryptu z poprzedniej porady. I to w zasadzie wszystko, poniżej gotowy skrypt:

<?

$baza = mysql_connect("localhost", "user", "password");

mysql_select_db("baza1",$baza);

$marki = mysql_query("SELECT DISTINCT(marka) FROM auta;",$baza);

for ($i=0;$i<mysql_num_rows($marki);$i++) {

$marka = mysql_fetch_row($marki);

$tmarki[]=$marka[0];

$wynik = mysql_query("SELECT DISTINCT(model)

FROM auta WHERE marka='$marka[0]';",$baza);

for ($j=0;$j<mysql_num_rows($wynik);$j++) {

$model = mysql_fetch_row($wynik);

$tmodele[$i][$j] = $model[0];

}

}

mysql_close($baza);

echo '<form name="form1" action="index.php" method="get">

<select name="lista1" onChange="zmien(this.options.selectedIndex)">';

foreach ($tmarki as $linia) echo "<option>$linia</option>";

echo '</select>

<select name="lista2"></select>

<input type="submit" value="Szukaj">

</form>';

echo '

<script language="javascript" type="text/javascript">

<!--

function zmien(wybor) {

l2=document.form1.lista2;

for (i=l2.options.length;i>=0;i--) l2.options[i]=null;

for (i=0;i<opcje[wybor].length;i++)

l2.options[i]=new Option(opcje[wybor][i].value,opcje[wybor][i].text);

}

ile_lista1=document.form1.lista1.options.length;

opcje=new Array(ile_lista1)

for (i=0;i<ile_lista1;i++) opcje[i]=new Array();

';

for ($i=0;$i<count($tmodele);$i++) {

for ($j=0;$j<count($tmodele[$i]);$j++) {

echo "opcje[$i][$j]=new Option(\"";

echo $tmodele[$i][$j]."\",\"".$tmodele[$i][$j]."\");\n";

}

}

echo 'zmien(0);

//-->

</script>';

?>

Jeżeli chcesz wyszukiwać wybrane wartości w tabeli, możesz posłużyć się przykładowym skryptem wyszukującym dane na podstawie powyższego formularza:

<?

$marka = $_GET["lista1"];

$model = $_GET["lista2"];

if ($marka<>"" and $model<>"") {

$sql="SELECT * FROM auta WHERE marka='$marka' and model='$model';";

$baza = mysql_connect("localhost", "user", "password");

mysql_select_db("baza1",$baza);

$wynik = mysql_query($sql,$baza);

mysql_close($baza);

$wierszy = mysql_num_rows($wynik);

$pol = mysql_num_fields($wynik);

for ($i=0;$i<$wierszy;$i++) {

$wiersz = mysql_fetch_row($wynik);

for ($j=0;$j<$pol;$j++) echo $wiersz[$j]." ";

echo "<br>";

}

}

?>



Wyszukiwarka

Podobne podstrony:
MAMO i babciu, Księga życzeń--zrób sam, instrukcja-jak wykonać
Jak wykonać szyk komponentów po lini śrubowej
Podwójny zawór hamujący, sterowany typu 2ZHB 10 12
jak wykonać raport po sprawdzianie
Jak wykonać decoupage, cooooooooooooos
Jak wykonać masaż antycellulitowy
Jak wykonać kable połączeniowe
Jak wykonać tęczowy makijaż Gucci, Makijaż i pielęgnacja
Jak wykonać wstążkową bombkę
Jak wykonać izolację ścian budowanego domu
Mini poradnik Jak wykonac udane zdjecia wakacyjne
jak wykonac sortowanie przez zamiane wymiane wybor algorytm selection sort, PHP Skrypty
Sprawozdania grafy, Jak wykonac sprawozdanie
145 Jak wykonac prace w dwa razy krotszym czasie, Linux, płyty dvd, inne dvd, 1, Doradca Menedzera
Jak wykonać kapelusz
Jak wykonać różę z bibuły
Jak wykonać obsługę stosu (First In, PHP Skrypty
jak wykonać bukiet kwiatów z bibuły

więcej podobnych podstron