Devo implementare un form che permette di selezionare all'utente 3 campi rispettivamente
Provincia->Comune->Zona
Ho trovato in rete uno script ajax-php che comprende la selezione di 2 campi, infatti creando il database Province->Comuni funziona su IE7 anche se comunque non riesco ad inviare i dati delle select al DB.
Il problema nasce se cerco di inserire la terza select, ho cercato un bel po in rete senza successo, lo script è formato da 2 pagine più la index:
lists.js e request.php.
I sorgenti del codice modificato sono questi:
lists.js
----------------------------------------------------------------------------------------codice:var xmlHttp = getXmlHttpObject(); function loadList(tb, id){ xmlHttp.open('GET', '/system/request.php?table='+tb+'&id='+id, true); xmlHttp.onreadystatechange = stateChanged; xmlHttp.send(null); } function addOption(select, value, text) { //Aggiunge un elemento <option> ad una lista <select> var option = document.createElement("option"); option.value = value, option.text = text; try { select.add(option, null); } catch(e) { //Per Internet Explorer select.add(option); } } function getSelected(select) { //Ritorna il valore dell'elemento <option> selezionato in una lista return select.options[select.selectedIndex].value; } function stateChanged() { if(xmlHttp.readyState == 4) { //Stato OK if (xmlHttp.status == 200) { var resp = xmlHttp.responseText; if(resp) { //Le coppie di valori nella striga di risposta sono separate da ; var values = resp.split(';'); //Il primo elemento è l'ID della lista. var listId = values.shift(); var select = document.getElementById(listId); //Elimina i valori precedenti while (select.options.length) { select.remove(0); } if(listId == 'province') { addOption (select, 0, 'Seleziona Provincia'); } var limit = values.length; for(i=0; i < limit; i++) { var pair = values[i].split('|'); //aggiunge un elemento <option> addOption(select, pair[0], pair[1]); } } } else { alert(xmlHttp.responseText); } } } function getXmlHttpObject() { var xmlHttp=null; try { // Firefox, Opera 8.0+, Safari xmlHttp=new XMLHttpRequest(); } catch (e) { // Internet Explorer try { xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); } } return xmlHttp; }
Il sorgente di request.php è questo:
Codice PHP:
<?php
/*File usato dalla funzione select dinamica ajax*/
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 'province':
$sql="SELECT idprovincia, nomeprovincia FROM `$tb` order by nomeprovincia";
break;
case 'comuni':
$sql="SELECT idcomune, nomecomune FROM `$tb` WHERE idprovincia=$pid order by nomecomune";
break;
case 'zone':
$sql="SELECT idcomune, zona FROM `$tb` where idcomune=$pid order by zona";
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, ';');
?>
----------------------------------------------------------------------------------------
Il codiche che uso nella pagina html è questo:
----------------------------------------------------------------------------------------codice:<td><select name="province" id="prov" onchange="loadList('comuni', getSelected(this))"> </select> <td><select name="comuni" id="citta" onchange="loadList('zone', getSelected(this));"></select></td> <td><select name="zona" id="zona"> </select></td>
Questo codice mi restituisce l'errore:
Necessario Oggetto (line 37) lists.js
Qualcuno è così buono da aiutarmi ? Probabilmente è un errore banale dovuto alla mia inesperienza.

Rispondi quotando
