![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 278 Pomógł: 44 Dołączył: 17.02.2004 Skąd: Wieliczka Ostrzeżenie: (10%) ![]() ![]() |
Mam sobie 3 tabele A, B i C
-każda ma po dwa pola, id i nazwa + ewentualny id tabeli nadrzędnej -każda kolejna jest zbiorem elementów poprzedniej, czyli są połaczone relacjami - chyba tak to mozna nazwać. Mam też plik z trzema polami typu select odpowiadającymi każdej tabeli Do pierwszego selecta ładuję wszystkie idA i odpowiadające im nazwy I teraz chciał bym zrobić tak, żeby po wybraniu jakiegos elementu z pierwszego selecta wykonane zostało zapytanie zwracające do drugiego pola select idB i ich nazwy Tu z kolei po wybraniu elementu kolejne zapytanie i wypełnienie trzeciego selecta otrzymanymi rekordami. Cytat Przykład: idA, nazwa 0, a 1, b 2 , c idB, idA, nazwa 0, 0, a 1, 0, b 2, 1, c idC, idB, idA, nazwa 0, 2, 0, a 1, 2, 0, b 2, 1, 1, c w select1 wybieram pole 0 (a), to powinno mi pobrać automatycznie z bazy rekordy z tabeli B gdzie idA=0, czyli tu idB=0 i 1 i wpisać je do pola select2. Z drugiego selecta wybieram dalej np. pole 1 a stosowne zapytanie zwraca mi w trzecim polu select odpowiednie rekordy z tabeli C, tu był by to rekord idC=2 Jak cos takiego zrobić? Znalazłem coś takiego http://www.kess.snug.pl/?sid=10&pid=30 ale problem w tym że te 3 selecty mam w większym formularzu z innymi polami input, textarea itp. Jak więc to połączyć by dodać taką funkcjonalność do formulrza typu: Cytat <form ...> Jak wysyłam ten formularz to ma mi dodać wszystkie wartości do bazy - więc jak tu wcisnąć obsługę tych selectów?<input type="text" ...> <input type="text" ...> <input type="text" ...> <select name="A" size="1"> dane pierwszego selecta z bazy </select> <select name="B" size="1"> dane drugiego selecta z bazy na podstawie zawartości pierwszego </select> <select name="C" size="1"> dane trzeciego selecta z bazy na podstawie zawartości drugiego </select> <input type="text" ...> <input type="text" ...> ... </form> Zagnieżdżanie formularzy czy jak? Pomocy! -------------------- neverever
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 300 Pomógł: 1 Dołączył: 22.09.2003 Skąd: Czeladź Ostrzeżenie: (0%) ![]() ![]() |
najleprzym sposobem byłby w Twoim przypadku AJAX. Wczytujesz dane do drugiego selecta po zdarzeniu onchange (wcześniej czyścisz tego selecta żeby nie dodawać podwójnie). Jest jeszcze jedna metoda bez używania ajaxa: wczytanie wszystkiego do tablic javascryptowych (wielowymiarowych) i odpowiednia procedurka odczytująca z tych tablic - ale rozwiązanie jest mniej wygodne i wydłuża czas ładowania strony przy dużej ilości tablic.
-------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 318 Pomógł: 6 Dołączył: 27.01.2005 Ostrzeżenie: (0%) ![]() ![]() |
Bez AJAXa i tablic w JS też da się zrobić.
Niestety nie będzie to ładne rozwiązanie -> na onchange selecta1 i selecta2 przeładowujesz stronę i odbierasz te wartości. Na ich podstawie wyciągasz wartości następnego selecta. -------------------- Prawo Wylera:
Nie ma rzeczy niemożliwych dla kogoś, kto nie musi ich zrobić sam. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 278 Pomógł: 44 Dołączył: 17.02.2004 Skąd: Wieliczka Ostrzeżenie: (10%) ![]() ![]() |
najleprzym sposobem byłby w Twoim przypadku AJAX. Wczytujesz dane do drugiego selecta po zdarzeniu onchange (wcześniej czyścisz tego selecta żeby nie dodawać podwójnie). Jest jeszcze jedna metoda bez używania ajaxa: wczytanie wszystkiego do tablic javascryptowych (wielowymiarowych) i odpowiednia procedurka odczytująca z tych tablic - ale rozwiązanie jest mniej wygodne i wydłuża czas ładowania strony przy dużej ilości tablic. drugie rozwiązanie odpada bo danych będzie całkiem sporo. A co do ajaxa, to czy mogę prosić o jakiś przykład który by realizował coś takiego? -bo ja z ajaxa jestem całkiem zielony ![]() Bez AJAXa i tablic w JS też da się zrobić. tylko jak to zrobić gdy te 3 pola select są elementem większego formularza, którego wysłanie ma spowodować określoną akcje-tu zapis wszystkich wartości do bazy?
Niestety nie będzie to ładne rozwiązanie -> na onchange selecta1 i selecta2 przeładowujesz stronę i odbierasz te wartości. Na ich podstawie wyciągasz wartości następnego selecta. -------------------- neverever
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 418 Pomógł: 8 Dołączył: 16.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
neverever => gugiel, Panie bracie, tam o AJAX-ie od groma informacji...
![]() -------------------- |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 278 Pomógł: 44 Dołączył: 17.02.2004 Skąd: Wieliczka Ostrzeżenie: (10%) ![]() ![]() |
neverever => gugiel, Panie bracie, tam o AJAX-ie od groma informacji... Może i od groma ale mówię że z ajaxem nigdy nie miałem do czynienia.![]() Bazując na stronie http://www.php.rk.edu.pl/w/p/powizane-pola...zystujce-ajaxa/ zrobiłęm coś takiego:
A plik getm.php: A nawet tak: Pokazuje mi się formularz, kraje ładnie wypełnione a po wybraniu jakiegoś, select miasta zostaje wyczyszczony i nic się w nim nie pojawia - dlaczego? Co jest nie tak w tym kodzie? Ten post edytował neverever 5.09.2007, 13:32:05 -------------------- neverever
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 3.03.2009 Ostrzeżenie: (0%) ![]() ![]() |
przepraszam że odświeżam, ale wciąż nie uzyskano odpowiedź...
Cytat w linku powyżej jest mała instrukcja, jak stworzyć ten skypt. Tak jak w temacie "Pola select z danymi zależne od siebie". W pierwszym i drugim polu nie wyświetla się żadne miasto.... Czy Ktoś uporał się z tym problemem? Jak go rozwiązać? Ten post edytował bbula 3.03.2009, 12:15:51 |
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
A może jakieś błędy wypluwa? Sprawdź najpierw skrypt JS w konsoli błędów, potem wywołaj bezpośrednio żądanie z AJAX, aby zobaczyć, czy są jakiekolwiek dane. Od ogółu do szczegółu.
-------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 3.03.2009 Ostrzeżenie: (0%) ![]() ![]() |
moj index
Kod <script type="text/javascript" src="ajax.js"></script> <script type="text/javascript"> var ajax = new sack(); function getml(sel) { var cc = sel.options[sel.selectedIndex].value; document.getElementById('miasto').options.length=0; if(cc.length>0){ ajax.requestFile = 'getm.php?cc='+cc; ajax.onCompletion = makem; ajax.runAJAX(); } } function makem() { var obj = document.getElementById('miasto'); eval(ajax.response); } function reset_obj(obj){ if(obj!= null && obj.hasChildNodes()) { for(var i=0; i <obj.childNodes.length;i++) obj.removeChild(obj.firstChild); } } </script> <form action=""> <select id="kraj" name="kraj" size="1" onchange="getml(this)"> <option value="">--</option> <?php $conn = mysql_connect('mysql2.yoyo.pl','db698643','****'); $db = mysql_select_db('db698643',$conn); if($sql = mysql_query("SELECT * FROM kraj ORDER BY nazwa ASC",$conn)) while ($rekord = mysql_fetch_array($sql)){ if($rekord['nazwa']=='Polska') echo '<option value="'.$rekord['id'].'" selected>'.$rekord['nazwa'].'</option>'; else echo '<option value="'.$rekord['id'].'">'.$rekord['nazwa'].'</option>'; } mysql_close($conn); ?> </select> <select id="miasto" name="miasto" size="1"> <option value="">Wybierz miasto</option> </select> </form> a to getm.php Kod <?PHP header('Content-Type: text/html; charset=iso-8859-2'); define('HOST', 'mysql2.yoyo.pl'); define('USER', 'db698643'); define('PASS', '*****'); define('DBASE', 'db698643'); if(isset($_GET['cc'])){ $k=htmlspecialchars($_GET['cc']); $conn = mysql_connect('mysql2.yoyo.pl','db698643','*****'); $db = mysql_select_db('db698643',$conn); echo "obj.options[obj.options.length] = new Option('--','');"; if($sql = mysql_query("SELECT * FROM miasto WHERE kraj='$k' ORDER BY nazwa ASC",$conn)) while ($rekord = mysql_fetch_array($sql)){ echo '<option value="'.$rekord['id'].'">'.$rekord['nazwa'].'</option>'; echo "obj.options[obj.options.length] = new Option('".$rekord['nazwa']."','".$rekord['id']."');"; } mysql_close($conn); } ?> i jeszcze plik ajax, ale wątpie zeby tam był błąd a to struktura tabel Kod CREATE TABLE kraj ( id int(11) unsigned NOT NULL auto_increment, nazwa varchar(255) NOT NULL, PRIMARY KEY (id), UNIQUE KEY nazwa (nazwa) ); CREATE TABLE miasto ( id int(11) unsigned NOT NULL auto_increment, nazwa varchar(255) NOT NULL, kraj int(11) NOT NULL, PRIMARY KEY (id) W pierwszym polu select są nazwy krajów, drugie jest puste, skrypt chyba lub raczej polega na numerze miasta przyporządkowanym do id w kraju, ale nic się nie wyświetla, gdzie jest błąd? prosze o pomoc, pozdrawiam |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 24.07.2025 - 16:43 |