- W Boga - wierze. Natomiast nie bardzo wierzę w to, co ludzie mówią o Bogu.
[ Pobierz całość w formacie PDF ][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?
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.
Sposób wykonania takiego formularza opisałem dokładnie w osobnej . 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...
[ Pobierz całość w formacie PDF ]zanotowane.pldoc.pisz.plpdf.pisz.plslaveofficial.keep.pl