Ciao a tutti!
Allora vorrei porre una domanda...
Ho trovato in rete uno script per le select dinamiche in ajax.
L'ho modificato e adattato alle mie esigenze (solo due select, non tre) e ho apportato qualche modifica al codice.
Ora mi ritrovo con tre file:
1) uno php che contiene il form seguente:
Codice PHP:
<script type="text/javascript" src="listspren.js"></script>
<form name="modulo" enctype="multipart/form-data" action="pagina.php"
method="post" >
<label for="pren">Prenotazione</label>
<select name="pren" id="pren" onChange="loadList('pren1', getSelected(this))" >
</select>
<label for="pren1">Bla bla bla</label>
<select name="pren1" id="pren1">
</select>
<input type="submit" name="Submit" value="Procedi">
<script type="text/javascript">
//<![CDATA[
loadList('pren', 0);
//]]>
</script>
</form>
ecco adesso il file listspren.js contiene funzioni ajax, tra cui la loadlist mi invia al terzo file (requestpren.php) il nome della tabella e l'id.
Codice PHP:
function loadList(tb, id){
xmlHttp.open('GET', 'requestpren.php?table='+tb+'&id='+id, true);
xmlHttp.onreadystatechange = stateChanged;
xmlHttp.send(null);
}
il file requestpren.php riceve il nome tabella e l'id e fa due query diverse in base al nome della tabella passata (la prima se si tratta della prima tabella -> prima select ... la seconda se ho già scelto il valore nella prima select e allora mi andrà a riempire la seconda select con i valori della seconda tabella)...
Codice PHP:
session_start();
require 'dbconfig.php';
$conn = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or die;
mysql_select_db(DB_NAME) or die;
//I valori in input vanno verificati
//id deve essere un valore numerico
$pid = (int)$_REQUEST['id'];
//maschera eventuali caratteri speciali in table
$tb = mysql_real_escape_string($_REQUEST['table'], $conn);
switch($tb) {
case 'pren':
$sql="SELECT ....
FROM `$tb`
WHERE .....
ORDER BY ....;
break;
case 'pren1':
$sql="SELECT ....
FROM `$tb` WHERE ... ORDER BY ....";
break;
}
//Il primo elemento della risposta è il nome della tabella (= attributo ID del tag select)
$out="$tb;";
if($result = mysql_query($sql, $conn)) {
while ($row = mysql_fetch_row($result)) {
$out .= $row[0] . '|' . $row[1] . ';';
}
}
//Rimuove il carattere ; in coda
echo rtrim($out, ';');
?>
Ok, fin qua tutto bene e funziona!
Ma la mia domanda è... se volessi prendere i dati da riempire le due select dalla stessa tabella e non da due, come posso fare? Perchè ovviamente se metto il nome della stessa tabella es. pren , in request.php nello switch sarebbero due case pren e quindi non saprebbe dove andare o cosa fare (in effetti provando non va a funzionare il riempimento della seconda select...).
Qualcuno di voi ha mica un' idea?