- Home
- Categorie
- Coding e Sistemistica
- Coding
- Select dinamiche - stampa ID e non il valore
- 
							
							
							
							
							Select dinamiche - stampa ID e non il valoreCiao a tutti, 
 in giro sulla rete ho trovato un bellissimo script che mi permette di avere 2 gruppi di Select dinamiche gestite con Ajax e Php.
 Un gruppo da tre:- Regioni
- Province
- Comuni
 ed un gruppo da due - Categorie professionali
- Ruolo Professionale
 Ovviamente tutto legato da tabelle in un Db Mysql. Il problema e che nei campi mi stampa il valore dell'ID e non il valore della selezione. 
 Ad esempio: invece di Lazio - Roma - Agosta mi viene segnato nei campi 5 - 8 - 15Vi posto il codice cosi forse sarò più chiaro: FORM: 
 <select name="regione_domicilio" id="regione_domicilio" onchange="loadList('provincia_domicilio', getSelected(this));clearList('comune_domicilio')" style="width:500px" class="input">
 <option value="0">--- Selezionare Regione di Domicilio ---</option>
 </select></div></td></tr>
 <tr valign="baseline" bgcolor="efefef">
 <td align="right"><div align="right" class="Stile11">Provincia Domicilio:</div></td>
 <td bgcolor="efefef"><div align="left">
 <select name="provincia_domicilio" id="provincia_domicilio" onChange="loadList('comune_domicilio', getSelected(this))" style="width:500px" class="input">
 <option value="0">--- Selezionare Provincia di Domicilio ---</option>
 </select></div></td></tr>
 <tr valign="baseline" bgcolor="efefef">
 <td align="right"><div align="right" class="Stile11">Comune Domicilio:</div></td>
 <td bgcolor="efefef"><div align="left">
 <select name="comune_domicilio" id="comune_domicilio" style="width:500px" class="input">
 <option value="0">--- Selezionare Comune di Domicilio ---</option>
 </select><select name="categorie_professionali" id="categorie_professionali" onChange="loadList('ruolo_professionale', getSelected(this))" style="width:500px" class="input"><option value="0">--- Selezionare Categoria Professionale ---</option> 
 </select></div></td></tr>
 <tr>
 <td align="right" valign="middle" bgcolor="efefef"><div align="right" class="Stile15"><span class="Stile47 Stile74 Stile82"><span class="Stile74">Ruolo professionale:</span></span></div></td><td align="left" valign="middle" bgcolor="efefef"><div align="left">
 <select name="ruolo_professionale" id="ruolo_professionale" style="width:500px" class="input"><option value="0">--- Selezionare Ruolo Professionale ---</option>
 </select></html> 
 <script type="text/javascript">
 //<![CDATA[
 loadList('categorie_professionali', 0);
 loadList('regione_domicilio', 0);
 var queueWatcher = setInterval(checkQueue, 200);
 //]]>
 </script>REQUEST.PHP 
 <?php
 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 'categorie_professionali':
 $sql="SELECT id, categoria_professionale FROM$tbORDER BY categoria_professionale";
 break;
 case 'ruolo_professionale':
 $sql="SELECT id, categoria_professionale FROM$tbWHERE id_categorie_professionali=$pid ORDER BY categoria_professionale";
 break;
 case 'regione_domicilio':
 $sql="SELECT id, regione_domicilio FROM$tbORDER BY regione_domicilio";
 break;
 case 'provincia_domicilio':
 $sql="SELECT id, provincia_domicilio FROM$tbWHERE id_regione_domicilio=$pid ORDER BY provincia_domicilio";
 break;
 case 'comune_domicilio':
 $sql="SELECT id, comune_domicilio FROM$tbWHERE id_provincia_domicilio=$pid ORDER BY comune_domicilio";
 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, ';');
 ?>LISTS.JS 
 var xmlHttp = getXmlHttpObject();
 var busy = false;
 var requests = new Array();function checkQueue() { 
 if(!busy && requests.length > 0) {
 sendRequest(requests.shift());
 }
 }
 function sendRequest(req) {
 busy = true;
 xmlHttp.open('GET', req, true);
 xmlHttp.onreadystatechange = stateChanged;
 xmlHttp.send(null);
 }
 function loadList(tb, id){
 requests.push('request.php?table='+tb+'&id='+id);
 }
 function clearList(listId) {
 var select = document.getElementById(listId);
 //Elimina i tag options tranne il primo (--- Selezionare xxx ---)
 while (select.options.length > 1) {
 select.remove(1);
 }
 }
 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) {
 busy = false;
 //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); clearList(listId); var limit = values.length; for(i=0; i < limit; i++) { var pair = values*.split('|'); //aggiunge un elemento <option> addOption(select, pair[0], pair[1]); } } } }} 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;
 }Vi prego di aiutarmi, sono certo che è una sciocchezza, ma sono giorni che ci sbatto il cranio!! Grazie 
 
- 
							
							
							
							
							Un anima Pia che mi salva da una crisi di nervi??? 
 
- 
							
							
							
							
							
Ciao leftist1973, 
 ho controllato tutto il codice e apparentemente sembra corretto.Prova a dirmi se i vari output sono i seguenti. 
 Nella pagina php dove viene eseguito il select viene stampato:
 id|nomeCampo;
 id2|nomeCampo2;
 id3|nomeCampo3AJAX prende questi risultati separati dal punto e virgola e li "spilltta" in un array aggiungendo opzioni alla select in questo modo: 
 <option value=id" >nomeCampo</option>Mi confermi quanto ho detto? 
 
- 
							
							
							
							
							Ciao Bazarop, grazie 1000 per la tua risposta. Scusa se non ho scritto prima ma ho tentato invano come un matto a trovare una soluzione che purtroppo continua ad essere di esito negativo!! Per chiarirti il problema ho 4 file, 3 in php ed 1 in asp. - dbconfig.php -> qui c'è il set di connessione
- request.php -> qui si costruiscono le select
- lists.js -> scipt in Ajax
- form.asp -> qui invece faccio visualizzare le select dinamiche.
 Le select nel form mi stampano perfettamente i campi (nomeCampo) ma nella tabella invece mi postano i valori dell'ID!! 
 Le option sono <option value="0" >nomeCampo</option>
 0 (zero) corrisponde all'ID.Spero che nella mia confusione mentale sia stato un pò chiaro. Grazie