Tworzę formularz zgłoszeniowy, w którym jest kilka list zależnych od siebie. O ile zrobienie zależnej listy od poprzedniej mi jakoś wyszło to nie wiem jak zrobić żeby kolejna lista była zależna nie tylko od poprzedniej ale również od tej wcześniejszej czyli w wielkim skrócie:
- lista A (dane pobierane z bazy mysql) - kategoria główna
- lista B zależna od A (dane pobierane z bazy mysql) - kategoria wiekowa
- lista C zależna od A i B (dane pobierane z bazy mysql) - kategoria wagowa
To co zrobiłem: wybieram z listy A, pojawia się lista B już z ograniczonym wyborem co do wieku, po wybraniu z listy wieku pojawia sie lista C z ograniczonym wyborem co do wagi ale już bez różnicy na kategorię z listy A
Teraz trochę kodu
Tabele w bazie danych:
CODE
tabela1: id, id_kategoria, id_wiek, id_waga
tabela2: id, wiek
tabela3: id, waga
tabela2: id, wiek
tabela3: id, waga
plik php1
CODE
<form action=".........." method="post" id="formularzid">
Nazwisko: <input type="text" name="nazwisko" id="nazwisko"></BR>
Imię: <input type="text" name="imie" id="imie"></BR>
Konkurencja: <select name="id_kategoria" id="id_kategoria" onchange="showUser(this.value)">
<option value="">Wybierz konkurencję</option>
... pobieranie listy z bazy danych
<option value="1">kategoria1</option>
......
<option value="5">kategoria5</option>
</select>
<div id="txtDane1"></div>
<div id="txtDane2"></div>
<div id="txtDane3"></div>
<input type="submit" value="Dodaj">
</form>
Nazwisko: <input type="text" name="nazwisko" id="nazwisko"></BR>
Imię: <input type="text" name="imie" id="imie"></BR>
Konkurencja: <select name="id_kategoria" id="id_kategoria" onchange="showUser(this.value)">
<option value="">Wybierz konkurencję</option>
... pobieranie listy z bazy danych
<option value="1">kategoria1</option>
......
<option value="5">kategoria5</option>
</select>
<div id="txtDane1"></div>
<div id="txtDane2"></div>
<div id="txtDane3"></div>
<input type="submit" value="Dodaj">
</form>
skrypt
CODE
function showUser(str)
{
if (str=="")
{
document.getElementById("txtDane1").innerHTML="";
return;
}
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("txtDane1").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","zawody.php?q="+str,true);
xmlhttp.send();
}
{
if (str=="")
{
document.getElementById("txtDane1").innerHTML="";
return;
}
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("txtDane1").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","zawody.php?q="+str,true);
xmlhttp.send();
}
plik zawody.php
CODE
<?php
$q = intval($_GET['q']);
$con = mysql_connect('..............');
if (!$con)
{
die('Could not connect: ' . mysql_error($con));
}
mysql_select_db('......',$con);
$sql="SELECT * FROM tabela2 WHERE id_kategoria = '".$q."'";
$result = mysql_query($sql);
echo "<select name=\"id_wiek\" id=\"id_wiek\" onchange=\"showUser2(this.value)\">
<option value=\"\">Wybierz wiek</option>";
while($row = mysql_fetch_array($result))
{
echo "<option value=";
echo $row['id_wiek'];
echo ">";
echo $row2['wiek'];
echo "</option>";
}
echo "</select>";
mysql_close($con);
?>
$q = intval($_GET['q']);
$con = mysql_connect('..............');
if (!$con)
{
die('Could not connect: ' . mysql_error($con));
}
mysql_select_db('......',$con);
$sql="SELECT * FROM tabela2 WHERE id_kategoria = '".$q."'";
$result = mysql_query($sql);
echo "<select name=\"id_wiek\" id=\"id_wiek\" onchange=\"showUser2(this.value)\">
<option value=\"\">Wybierz wiek</option>";
while($row = mysql_fetch_array($result))
{
echo "<option value=";
echo $row['id_wiek'];
echo ">";
echo $row2['wiek'];
echo "</option>";
}
echo "</select>";
mysql_close($con);
?>
Funkcja showUser2 wygląda tak samo jak funkcja showUser z małymi zmianami, zamiast txtDane1 jest txtDane2, zamiast zawody.php?q jest wiek.php?q2. Plik wiek.php to też prawie to samo co zawody.php tylko zamiast $q = intval($_GET['q']); używam $q2 = intval($_GET['q2']); Wiem, że muszę jakoś pobrać "value" z listy kategorii i zmodyfikować funkcję showUser2 by przekazała tą dodatkową wartość do pliku wiek.php ale nie wiem jak.