• User

    Inserimento dato database

    Ciao 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 $tb ORDER BY nome";
    break;
    case 'province':
    $sql="SELECT id, nome FROM $tb WHERE 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 :ciauz:


  • ModSenior

    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.


  • User

    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!:ciauz:


  • ModSenior

    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.


  • User

    Ciao! Thedarkita,
    Ho provato alcune modifiche ma niente, mi salva sempre l'id.
    Hai qualche consiglio?

    Ciao!


  • User

    Ciao a tutti,
    Per aver una risposta devo cambiare sezione del forum?
    Fatemi sapere, ciao grazie.


  • ModSenior

    Dovresti postare il codice javascript che si occupa di ciò.


  • User

    Ok! l'ho postato nella sezione scripting.
    Grazie ancora.