Allora ritorno alla carica:
ricapitolando la situazione:
ho un form con due campi select
il primo è provincia che viene popolato tramite query al db
il secondo è comune che dovrebbe essere popolato a seconda della scelta che si fa in provincia.
Ho utilizzato ajax e javascript prendendo e riadattando un esempio preso da un posto su questo forum.
Posto il codice
il campo della form che gestisce l'onchange è:
<td valign="bottom" width="30px" colspan="2">
<select id="provincia" onchange="loading()" name="provincia" size="1" style="border: 1px solid #0452a5;" >
<option value="Seleziona" selected> Seleziona</option>
<?php
$provincia = new province();
while ($result->hasNext()){
$provincia = $result->next();
?>
<option value="<?php echo $provincia->sigla_provincia; /*.';'. $provincia->desc_provincia*/?>">
<?php echo $provincia->desc_provincia?>
</option>
<?php } ?>
</select>
</td>
dove loading() è una funzione javascript che ho incluso nella pagina tra le head dell'html
ed il testo è:
var http = createRequestObject();
function createRequestObject() {
var ro;
var browser = navigator.appName;
if (browser == "Microsoft Internet Explorer") {
ro = new ActiveXObject("Microsoft.XMLHTTP");
} else {
ro = new XMLHttpRequest();
}
return ro;
}
function loading() {
var id = document.getElementById('provincia').value;
http.open("GET", "../../ADMIN-APP-CO/selectComune.php?sigla=" + id, true);
http.onreadystatechange = getComune;
http.setRequestHeader("connection", "close");
alert('lo stato vale http.readyState: ' +http.readyState);
http.send(null);
}
function getComune() {
var newOption;
var where = (navigator.appName == "Microsoft Internet Explorer") ? -1
: null;
var Comune = document.getElementById('comune');
while (Comune.options.length) {
Comune.remove(0);
}
id = document.getElementById('provincia').value;
if (id == 'Seleziona') {
document.getElementById('comune').disabled = true;
newOption = document.createElement("option");
newOption.value = 'Seleziona';
newOption.text = 'Seleziona';
Comune.add(newOption, where);
} else {
if (http.readyState == 4) {
if (http.status == 200) {
var response = http.responseText;
if (response == '') {
document.getElementById('comune').disabled = true;
newOption = document.createElement("option");
newOption.value = 'Seleziona';
newOption.text = 'Seleziona';
State.add(newOption, where);
} else {
coppia = response.split(',');
max = coppia.length;
newOption = document.createElement("option");
newOption.value = 'Seleziona';
newOption.text = 'Seleziona';
Comune.add(newOption, where);
for (x = 0; x < max; x++) {
val = coppia[x].split('-');
newOption = document.createElement("option");
newOption.value = val[1];
newOption.text = val[1];
Comune.add(newOption, where);
}
document.getElementById('comune').disabled = false;
}
}
}
}
}
e la pagina di selectComune.php che dovrebbe farmi la query per restituirmi il risultato dei comuni è:
<?php
require_once 'C:/xampp/htdocs/ADMIN-APP/ADMIN-APP-CO/business/ComuniLogic.php';
require_once 'C:/xampp/htdocs/ADMIN-APP/ADMIN-APP-CO/models/comuni.php';
$sigla=$_GET["sigla"];
$logic= new ComuniLogic();
$comune = new comuni();
$comune->sigla_provincia=$sigla;
$result = $logic->getComuni($comune);
$ncomune = new comuni();
$arrComuni[] = '';
$i=1;
while($result->hasNext()){
$ncomune = $result->next();
$arrComuni[]=array('com_id'=>$i,'com_name'=>$ncomune->nome_comune);
}
echo $arrComuni;
?>
Il problema è che non riesco a recuperare la sigla della provincia passata dallo javascript facendo la $_GET in questo modo nel selectComune.php viene effettuata (so che passa di lì) la query con una "where sigla_provincia =" senza avere il valore della provincia.
Mi potete aiutare indicandomi dove sbaglio?
Grazie mille.

Rispondi quotando