- Home
- Categorie
- Coding e Sistemistica
- Coding
- Inserimento dato database
- 
							
							
							
							
							Inserimento dato databaseCiao a tutti! 
 Ho un problema con tre select dinamiche (regioni,province,comuni).
 Non riesco a salvare nel database il campo (comuni) scelto.
 Mi spiego meglio, mi salva l'id e non il nome del campo.
 Per far funzionare il tutto, in modo che mi salvi il nome del comune,
 ho usato l'istruzione switch, solo che i comuni sono 8094.[php] 
 <?php
 //prova switch
 $comuni=$_POST['comuni'];
 switch($_POST['comuni'] )
 {
 case 1:
 $comuni='Altino';
 break;
 case 2:
 $comuni='Archi';
 break;
 case 3:
 $comuni='Ari';
 break;
 case 4:
 $comuni='Arielli';
 break;
 }
 ?>
 [/php]Io vorrei fare una cosa un po' più veloce, salvare direttamente il nome del 
 comune nel database.
 Vi posto anche le altre pagine per una migliore comprensione.[php] 
 <label for="regioni">Regioni</label>
 <select name="regioni" id="regioni" onchange="loadList('province', getSelected(this))" class="sele"></select><br /><label for="province">Province</label> 
 <select name="province" id="province" onChange="loadList('comuni', getSelected(this))" class="sele1">Province</select><br /><label for="comuni">Comuni</label> 
 <select name="comuni" id="comuni" class="sele2" >Comuni</select><br />
 [/php][php] 
 <?php
 include("include/conn_db.php");
 //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 'regioni':
 $sql="SELECT id, nome FROM$tbORDER BY nome";
 break;
 case 'province':
 $sql="SELECT id, nome FROM$tbWHERE id_regione=$pid ORDER BY nome";
 break;
 case 'comuni':
 $sql="SELECT id, nome FROM $tb WHERE id_provincia=$pid ORDER BY nome";
 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 .= utf8_encode($row[0] . '|' . $row[1] . ';');
 }
 }
 //Rimuove il carattere ; in coda
 echo rtrim($out, ';');
 ?>
 <?php
 include("include/chiusa_conn_db.php");
 ?>
 [/php][php] 
 var xmlHttp = getXmlHttpObject();
 function loadList(tb, id){
 xmlHttp.open('GET', '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 == 'regioni') { addOption (select, 0, '-- Selezionare regione --'); } if(listId == 'province' ) { addOption (select, 0, '-- Selezionare provincia --'); } if(listId == 'comuni' ) { addOption (select, 0, '-- Selezionare comune --'); } var limit = values.length; var limit = values.length; for(i=0; i < limit; i++) { var pair = values*.split('|'); //aggiunge un elemento <option> addOption(select, pair[0], pair[1]); }} 
 } else {
 alert(xmlHttp.responseText);
 }
 }
 }
 //funzione per rendere i browswr compatibili
 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;
 }
 [/php]
 Spero si possa capire, altrimenti dovrò scrivere uno switch gigantesco.
 Tanti saluti 
 
- 
							
							
							
							
							Ciao mauranto99, metti nel value del select direttamente il nome invece dell'id. 
 Anche se sarebbe corretto salvar gli ID, visto che hai delle tabelle con i nomi.
 
- 
							
							
							
							
							Ciao Thedarkita, Nella fretta ho dimenticato del codice della prima pagina dove ci sono le select, che puo' essere utile. [PHP] 
 <script type="text/javascript" src="lists.js"></script><label for="regioni">Regioni</label> 
 <select name="regioni" id="regioni" onchange="loadList('province', getSelected(this))" class="sele"></select><br /><label for="province">Province</label> 
 <select name="province" id="province" onChange="loadList('comuni', getSelected(this))" class="sele1">Province</select><br /><label for="comuni">Comuni</label> 
 <select name="comuni" id="comuni" class="sele2" >Comuni</select><br /><!-- carica il contenuto della lista regioni --> 
 <script type="text/javascript">
 //<![CDATA[
 loadList('regioni', 0);
 //]]>
 </script>[/PHP] L'ultima pagina non ha come estensione php ma js, praticamente viene richiamata per popolare le select. Quello che dicevi di fare, era di : 
 togliere (id="comun"i) e lasciare solo (name="comuni").Così non funziona. Attendo 
 Ciao! 
 
- 
							
							
							
							
							Il problema non è php, bensì javascript che ti inserisce come value gli ID piuttosto che i nomi delle città. Ciò che devi correggere è il codice javascript che utilizzi. 
 
- 
							
							
							
							
							Ciao! Thedarkita, 
 Ho provato alcune modifiche ma niente, mi salva sempre l'id.
 Hai qualche consiglio?Ciao! 
 
- 
							
							
							
							
							Ciao a tutti, 
 Per aver una risposta devo cambiare sezione del forum?
 Fatemi sapere, ciao grazie.
 
- 
							
							
							
							
							Dovresti postare il codice javascript che si occupa di ciò. 
 
- 
							
							
							
							
							Ok! l'ho postato nella sezione scripting. 
 Grazie ancora.