Grazie a quanti vorranno eventualmente darmi qualche indicazione.
Ho due select dinamiche grazie a jQuery e Ajax, per ottenere le prestazioni erogabili da un reparto ospedaliero.
Se seleziono il reparto (la prima select), viene correttamente popolata la seconda select (quella dei prestazioni); però - e qui sta il problema - se successivamente seleziono una prestazione dalla seconda select, la query che viene passata al file php non valorizza la variabile prestazioneid (verificato con Firebug) e dunque non restituisce il riepilogo finale.
La cosa pazzesca è che se agisco direttamente sulla seconda select (quella delle prestazioni) la variabile prestazioneid viene correttamente valorizzata!![]()
Questo il codice html:
Questo invece il Javascript/Ajax per generare dinamicamente le select:codice:<!-- ########### SELECT REPARTI ########### --> <label for="reparto">reparto:</label> <select id="reparto" name="reparto" onchange="selReparto(this.value);"> <option value="" selected="selected">-- seleziona --</option> <?php // Query selezione reparti. $sql = "select * from reparti order by reparto"; // Eseguo la query. $result = mysql_query($sql, $conn); while($reparto = mysql_fetch_array($result)) { ?> <option value="<?php echo $reparto['id']; ?>"><?php echo $reparto['reparto']; ?></option> <?php } ?> </select> </p> <!-- ########### SELECT PRESTAZIONI ########### --> <label for="prestazioni">Prestazione:</label> <select id="prestazioni" name="prestazioni" onchange="selPrest(this.value);"> <option value="" selected="selected">-- seleziona --</option> <?php // Query selezione tutte le prestazioni. $sql = "select * from generale order by PRESTAZIONE"; // Eseguo la query. $result = mysql_query($sql, $conn); while($prestazione = mysql_fetch_array($result)) { ?> <option value="<?php echo $prestazione['PRESTAZIONE']; ?>"><?php echo $prestazione['PRESTAZIONE']; ?></option> <?php } ?> </select> </p> <!-- ########### RIEPILOGO ########### --> <label for="riepilogo">Riepilogo:</label> <p id="riepilogo"></p> </p>
E infine il codice del file php richiamato da $.get per interagire con MySQL:codice:// Select delle prestazioni. function selReparto(idreparto) { // Seleziono le prestazioni di questo reparto. $.get("select_3.php", { repartoid: idreparto, requestItems: 'prestazioni'}, function(dataprestazioni){ $("select[id='prestazioni']").empty(); var options = '<option value="">-- seleziona --</option>'; var arrayprestazioni = dataprestazioni.split('||'); for (var i = 1; i < arrayprestazioni.length; i++) { var prestazione = arrayprestazioni[i].split(/,/); options += '<option value="' + prestazione[0] + '">' + prestazione[1] + '</option>'; } $("select[id='prestazioni']").html(options); }); } // Select di una prestazione. function selPrest(nomePrest) { // Seleziono una prestazione. $.get("select_3.php", { prestazioneid: nomePrest, requestItems: 'prestazione'}, function(dataPrestazione){ $("p[id='riepilogo']").empty(); var options = ' </p>'; var arrayPrestazione = dataPrestazione.split('||'); for (var i = 1; i < arrayPrestazione.length; i++) { var prestazione = arrayPrestazione[i].split(/,/); options += ' ' + prestazione[0] + '</p>' + ' ' + prestazione[1] + '</p>'; } $("p[id='riepilogo']").html(options); }); }
codice:// Seleziona le prestazioni di un reparto. include("dbconfig.php"); if (isset($_GET['repartoid']) and is_numeric($_GET['repartoid'])) { if (isset($_GET['requestItems']) and $_GET['requestItems']==='prestazioni') { $repartoID = intval($_GET['repartoid']); $query = <<<EOQ SELECT * FROM generale WHERE id_reparto = '$repartoID' ORDER BY PRESTAZIONE EOQ; $result = mysql_query($query, $conn); $returnprestazioni = ''; while ($row = mysql_fetch_array($result)) { $returnprestazioni .= "||".$row['id'].",".$row['PRESTAZIONE']; } print_r($returnprestazioni); } } //seleziona la prestazione scelta else if (isset($_GET['prestazioneid'])) { if (isset($_GET['requestItems']) and $_GET['requestItems']==='prestazione') { $prestazioneID = $_GET['prestazioneid']; $query = <<<EOQ SELECT * FROM generale WHERE PRESTAZIONE = '$prestazioneID' ORDER BY PRESTAZIONE EOQ; $result = mysql_query($query, $conn); $returnPrestazione = ''; while ($row = mysql_fetch_array($result)) { $returnPrestazione .= "||".$row['PRESTAZIONE'].",".$row['EROGABILE']; } print_r($returnPrestazione); } }

