Λοιπόν, ελπίζω να κατάλαβα καλά την απορία... Θα σου δώσω ένα παράδειγμα και ελπίζω να βοηθήσει. Έστω ότι έχουμε 2 drop down menu, στο πρώτο εμφανίζουμε μάρκα κινητού (π.χ. Nokia, SonyEricsson) και στο δεύτερο το μοντέλο του κινητού (π.χ. Nokia 3210). Όταν ο χρήστης επιλέξει την εταιρεία από το πρώτο drop down menu στο δεύτερο θα πρέπει να εμφανιστούν μόνο τα μοντέλα της συγκεκριμένης εταιρείας. Έστω ότι αυτά τα δεδομένα είναι περασμένα σε δύο πίνακες, σε ένα πίνακα έχουμε τις εταιρείες και σε έναν άλλο τα μοντέλα.
ΔΟΜΗ ΠΙΝΑΚΑ ΜΕ ΕΤΑΙΡΕΙΕΣ
TABLE companies
{
company_id int (ένας κωδικός αριθμός που χαρακτηρίζει την εταιρεία),
company varchar (το όνομα κάθε εταιρείας, πχ Samsung)
}
ΔΟΜΗ ΠΙΝΑΚΑ ΜΕ ΜΟΝΤΕΛΑ
TABLE models
{
id int autoincrement (αύξων αριθμός κάθε εγγραφής, μοναδικός κωδικός, ουσιαστικά θα μπορούσε να παραληφθεί αφού παρακάτω έχω μοναδικό κωδικό κάθε μοντέλου, το model_id, απλώς εγώ συνηθίζω στους πίνακές μου να βάζω και ένα αυξανόμενο κωδικό),
company_id int (ένας κωδικός αριθμός που χαρακτηρίζει την εταιρεία, αντίστοιχος του πίνακα companies),
model_id int (ένας κωδικός αριθμός που χαρακτηρίζει τo μοντέλο),
model varchar (το όνομα κάθε μοντέλου, πχ 3210)
}
Στο κομμάτι html-php που εμφανίζεις τα δύο μενού ο κώδικας είναι ο εξής:
<SELECT
onchange=getAvailableModels(this.value) name="company"> <OPTION value=""
selected>- Επιλέξτε εταιρεία-</OPTION>
<?php
$query = "SELECT company_id, company FROM companies";
$result = mysql_query($query) or die(mysql_error());
while ($row = mysql_fetch_array($result) ) {
print "<OPTION value=\"$row[0]\">$row[1]</OPTION>";
}
?>
</SELECT>
<SELECT name="model"> <OPTION
value="" selected>-Επιλέξτε κινητό-</OPTION></SELECT>
και μετά φτιάχνεις το εξής σκριπτάκι:
<SCRIPT language=javascript type=text/javascript>
var All_Models= new Array(
<?php
$database = mysql_connect($hostname_database , $username_database , $password_database ) or die(mysql_error());
mysql_select_db($database_database , $database );
$query = "SELECT company_id, model, model_id, id FROM models order by model";
$result = mysql_query($query) or die(mysql_error());
$count = mysql_num_rows($result)-1;
$i = 0;
while ( $i<$count)
{ $row = mysql_fetch_array($result);
print "'$row[0]-$row[1],$row[3]',";
$i++;
}
$row = mysql_fetch_array($result);
print "'$row[0]-$row[1],$row[3]'";
?>
)
function getAvailableModels(strMake){
// get available models
document.modelAvailability.model.options.length = 0;
var looper = 0;
for(var i = 0; i < All_Models.length; i++){
var k = All_Models
.indexOf('-');
if(All_Models.substr(0,k) == strMake){
getCurrent = document.modelAvailability.model.value;
document.modelAvailability.model.options.length = document.modelAvailability.model.options.length + 1;
var l = All_Models.indexOf(',');
var txt = All_Models.substr(k+1,l-k-1);
var val = All_Models.substr(l+1);
document.modelAvailability.model.options[looper].text = txt;
document.modelAvailability.model.options[looper].value = val;
looper++;
}
}
}
</SCRIPT>
Ουσιαστικά αρχικά δημιουργούμε ένα πίνακα All_Models, ο οποίος περιλαμβάνει όλα τα μοντέλα που έχει ο πίνακάς μας με τη μορφή company_id-model,id. Π.χ. ένα απόσπασμα θα ήταν το εξής
var All_Models= new Array( '8-6600,34','8-6310i,5','8-8210,41','8-8250,192','12-GX29,417','16-K750i,416')
όπου ο πρώτος αριθμός είναι ο κωδικός της εταιρείας, ίδιος στον πίνακα companies και στον πίνακα models, το δεύτερο είναο το μοντέλο κινητού, και το τρίτο είναι ο μοναδικός κωδικός κάθε εγγραφής του πίνακα models.
H συνάρτηση getAvailableModels παίρνει ως όρισμα την τιμή που δίνει ο χρήστης στο πρώτο μενού και μετά κάνει parsing σε κάθε στοιχείο του πίνακα, βρίσκει για ποιά στοιχεία το πρώτο κομμάτι είναι ίσο με την τιμή του ορίσματος, και μετά τραβάει την τιμή του model και του id και την περνάει στα αντίστοιχα πεδία του δεύτερου μενού.
Ελπίζω να ήταν αυτή η απορία σου και να μην τα έγραφα τσάμπα
. Μπλέξιμο, ε? Είναι λίγο μέχρι να καταλάβεις τη λογική... Ελπίζω να βοήθησα