api
(Sitemaster)
4 Wrzesień 2007 17:07
#1
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.
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:
Jak wysyłam ten formularz to ma mi dodać wszystkie wartości do bazy - więc jak tu wcisnąć obsługę tych selectów?
Zagnieżdżanie formularzy czy jak?
Pomocy!
dane pierwszego selecta z bazy
dane drugiego selecta z bazy na podstawie zawartości pierwszego
dane trzeciego selecta z bazy na podstawie zawartości drugiego
…
otrzymasz tablicę przesłaną w poscie
$_POST[arrTablica] = array
(
filds1=> jakas wartość,
filds2=> jakas wartość,
filds3=> jakas wartość,
A=>array(
fildsA=> jakas wartość,
),
B=>array(
fildsB=> jakas wartość,
),
C=>array(
fildsC=> jakas wartość,
),
filds4=> jakas wartość,
filds5=> jakas wartość,
);
później tylko sprawdzasz czy masz tablice w tablicy i czy nie jest pusta i dodajesz na bazie innego selekta wszystko
to tylko podpowiedz może się mylę ale może to cię coś naprowadzi
api
(Sitemaster)
5 Wrzesień 2007 12:13
#3
No raczej nie o to chodzi :?
Bazując na stronie http://www.php.rk.edu.pl/w/p/powizane-p … jce-ajaxa/
zrobiłęm coś takiego:
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); } Kraj: – <?php $conn = mysql_connect(HOST,USER,PASS); $db = mysql_select_db(DBASE,$conn); if($sql = mysql_query(“SELECT * FROM kraj ORDER BY nazwa DESC”,$conn)) while ($rekord = mysql_fetch_array($sql)){ echo ‘’.$rekord[‘nazwa’].’’; } mysql_close($conn); ?> Miasto: –
A plik getm.php:
<?php if(isset($_GET[‘cc’])){ $k=$_GET[‘cc’]; $conn = mysql_connect(HOST,USER,PASS); $db = mysql_select_db(DBASE,$conn); if($sql = mysql_query(“SELECT * FROM miasto ORDER BY nazwa DESC WHERE kraj=$k”,$conn)) while ($rekord = mysql_fetch_array($sql)){ echo ‘’.$rekord[‘nazwa’].’’; } mysql_close($conn); } ?>
A nawet tak:.
<?php if(isset($_GET[‘cc’])) { include ‘mysql.class.php’; $a = new mysql_db(); $a->connect(HOST, USER, PASS, DBASE); $q = $a->query_select(“SELECT * FROM miasto WHERE kraj = '”.mysql_real_escape_string($_GET[‘cc’])."’"); foreach($q as $i) { echo “obj.options[obj.options.length] = new Option(’”.$i[‘nazwa’]."’,’".$i[‘id’]."’); "; } $a->destruct(); } ?>
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?
ps.
Oczywiście define mam ustawione dla parametrów logowania do bazy
daj link pełen do tego może na gg
adpawl
(adpawl)
5 Wrzesień 2007 18:35
#5
Zamiast
<?php if(isset($_GET[‘cc’])){ $k=$_GET[‘cc’]; $conn = mysql_connect(HOST,USER,PASS); $db = mysql_select_db(DBASE,$conn); if($sql = mysql_query(“SELECT * FROM miasto ORDER BY nazwa DESC WHERE kraj=$k”,$conn)) while ($rekord = mysql_fetch_array($sql)){ echo ‘’.$rekord[‘nazwa’].’’; } mysql_close($conn); } ?>
daj
<?php header(‘Content-Type: text/html; charset=iso-8859-2’); if(isset($_GET[‘cc’])){ $k=htmlspecialchars($_GET[‘cc’]); $conn = mysql_connect(HOST,USER,PASS); $db = mysql_select_db(DBASE,$conn); if($sql = mysql_query(“SELECT * FROM miasto WHERE kraj=$k ORDER BY nazwa ASC”,$conn)) while ($rekord = mysql_fetch_array($sql)){ echo “obj.options[obj.options.length] = new Option(’”.$rekord[‘nazwa’]."’,’".$rekord[‘id’]."’);"; } mysql_close($conn); } ?>
a skrypty javascript z w pliku głównym przesuń do sekcji HEAD …i powinno śmigać.