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:
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>
Questo invece il Javascript/Ajax per generare dinamicamente le select:
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);
});
}
E infine il codice del file php richiamato da $.get per interagire con MySQL:
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);
}
}