![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 15.11.2013 Ostrzeżenie: (0%) ![]() ![]() |
Witam
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 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> 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(); } 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); ?> 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. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 350 Pomógł: 512 Dołączył: 4.01.2009 Skąd: Wrocław / Świdnica Ostrzeżenie: (0%) ![]() ![]() |
Skorzystaj z gotowca: http://www.99points.info/2010/06/ajax-tuto...nd-ajax-in-php/ - a jeżeli chcesz sam to zrobić to podejrzyj jak oni rozwiązali problem
Ten post edytował kamil4u 15.11.2013, 19:59:36 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 15.11.2013 Ostrzeżenie: (0%) ![]() ![]() |
Ciekawe rozwiązanie, jednak opiera się na 1 tabeli. Gdybym chciał zrobić podobnie to samo rozpisanie wszystkich możliwości zajęłoby mnóstwo czasu, w dodatku wiele rekordów miałoby tą samą wartość w polu "category" a inny "pid", istniałaby możliwość łatwej pomyłki, pominięcia jakiegoś wariantu itp. W podanej bazie przykładowych wartości jest niewiele a zajmują 30 rekordów, w mojej (np. waga i wiek te same a kategoria inna) samych wariantów jest kilkadziesiąt a takich rekordów byłoby pewnie kilkaset.
edit: z ciekawości sprawdziłem ile tych rekordów wyjdzie i okazało się, że nie jest aż tak tragicznie, spróbuję wykorzystać to rozwiązanie, pytanie tylko czy wykorzystując przycisk submit w tym formularzu normalnie poprzez post wyślę dane do bazy? Ten post edytował koryx 19.11.2013, 21:42:57 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 23:34 |