- 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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • slaveofficial.keep.pl
  • Szablon by Sliffka (© - W Boga - wierze. Natomiast nie bardzo wierzę w to, co ludzie mówią o Bogu.)