Select dinamiche : regioni province comuni

Discussione in 'Snippet PHP' iniziata da criric, 16 Agosto 2013.

  1. criric

    criric Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    21 Agosto 2010
    Messaggi:
    5.607
    Mi Piace Ricevuti:
    54
    Punteggio:
    48
    Sesso:
    Maschio
    Località:
    TN
    Ciao a tutti,
    ho usato jquery per la chiamata ajax e per popolare le select
    Lo script php crea il codice jquery che verrà eseguito dalla funzione eval()
    E'necessario un databae mysql e 3 tabelle che potete scaricare qui
    Qui potete trovare lo script in funzione

    Ho creato due pagine
    index.html : contiene le select e le funzioni javascript
    HTML:
    <!DOCTYPE html>
    <html>
        <head>
            <title>Comuni italiani</title>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
            <style type="text/css">
                div.ricerca {
                    line-height: 34px;
                }
                div.ricerca span {
                    display: inline-block;
                    width: 110px;
                    text-align: right;
                    padding-right: 4px;
                }
            </style>
            <script type="text/javascript">
                $(document).ready(function(){
                    comuni();
                    $("select").change(function(){
                        comuni();
                    })
                })
                function comuni() {                
                    $.ajax({
                        type: "POST",
                        url: "comuni.php",
                        data: $("#ricerca").serialize(),
                        success: function(response){
                            eval(response);
                        }
                    }); 
                }
            </script>
        </head>
        <body>
            <div class="ricerca">
                <form id="ricerca">
                    <span>Regione :</span>
                    <select name="regione">
                        <option value=""></option>
                    </select><br/>
                    <span>Provincia :</span>
                    <select name="provincia">
                        <option value=""></option>
                    </select><br/>
                    <span>Comune :</span>
                    <select name="comune">
                        <option value=""></option>
                    </select>
                </form>
            </div>
        </body>
    </html>
    
    comuni.php : contiene la connessione al db e le query per popolare le select
    PHP:
    <?php

    // recupero vaolori delle select
    $regione $_REQUEST['regione'];
    $provincia $_REQUEST['provincia'];
    $comune $_REQUEST['comune'];
    // mi connetto al database
    $sql = new mysqli("localhost""root""""database");
    // estraggo tutte le regioni
    $query "SELECT * FROM regioni";
    $result $sql->query($query);
    // svuoto la select regione
    echo "$('select[name=\"regione\"]').empty();";
    // aggiungo una option vuota
    echo "$('select[name=\"regione\"]').append('<option value=\"\"></option>');";
    // ciclo i risultati della query
    while ($row $result->fetch_array(MYSQLI_ASSOC)) {
        
    // imposto il selected sull'eventuale regione scelta
        
    $selected "";
        if (
    $row['idRegione'] == $regione) {
            
    $selected "selected=\"selected\"";
        }
        
    // popolo la select
        
    echo "$('select[name=\"regione\"]').append('<option $selected value=\"" $row['idRegione'] . "\">" addslashes($row['nomeRegione']) . "</option>');";
    }
    // se è stata scelta una regione
    if (!empty($regione)) {
        
    // estraggo le province della regione scelta
        
    $query "SELECT * FROM province WHERE idRegione ='$regione'";
        
    $result $sql->query($query);
        
    // svuoto la select provincia
        
    echo "$('select[name=\"provincia\"]').empty();";
        
    // aggiungo una option vuota
        
    echo "$('select[name=\"provincia\"]').append('<option value=\"\"></option>');";
        
    // ciclo i risultati della query
        
    while ($row $result->fetch_array(MYSQLI_ASSOC)) {
            
    // imposto il selected sull'eventuale provincia scelta
            
    $selected "";
            if (
    $row['siglaProvincia'] == $provincia) {
                
    $selected "selected=\"selected\"";
            }
            
    // popolo la select
            
    echo "$('select[name=\"provincia\"]').append('<option $selected value=\"" $row['siglaProvincia'] . "\">" addslashes($row['nomeProvincia']) . "</option>');";
        }
    }
    // se è stata scelta una provincia
    if (!empty($provincia)) {
        
    // estraggo i comuni della provincia scelta
        
    $query "SELECT * FROM comuni WHERE provincia ='$provincia'";
        
    $result $sql->query($query);
        
    // svuoto la select comune
        
    echo "$('select[name=\"comune\"]').empty();";
        
    // aggiungo una option vuota
        
    echo "$('select[name=\"comune\"]').append('<option value=\"\"></option>');";
        
    // ciclo i risultati della query
        
    while ($row $result->fetch_array(MYSQLI_ASSOC)) {
            
    // imposto il selected sull'eventuale comune scelto
            
    $selected "";
            if (
    $row['Istat'] == $comune) {
                
    $selected "selected=\"selected\"";
            }
            
    // popolo la select
            
    echo "$('select[name=\"comune\"]').append('<option $selected value=\"" $row['Istat'] . "\">" utf8_encode(addslashes($row['Comune'])) . "</option>');";
        }
    }
    ?>
    come sempre si accettano consigli critiche migliorie domande ... :byebye:
    ps:
    anche se sembrano andare a capo tutte le echo devono stare su una riga
     
    Ultima modifica di un moderatore: 8 Settembre 2013
  2. leo_grafica

    leo_grafica Nuovo Utente

    Registrato:
    21 Novembre 2008
    Messaggi:
    3
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    ho copiato tutto per vedere come funziona:
    1) ho creato una cartella ''contatti'' con all'interno la pagina''index.html''
    2) ho creato la pagina (php) chiamandola ''comuni.php''
    3) ho copiato all'interno la cartella ''comuni'' con i 3 database

    Visualizzo correttamente la pagina ma non le voci all'interno dei select.... dove ho sbagliato?
    Grazie dell'aiuto!!
     
  3. criric

    criric Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    21 Agosto 2010
    Messaggi:
    5.607
    Mi Piace Ricevuti:
    54
    Punteggio:
    48
    Sesso:
    Maschio
    Località:
    TN
    Ciao, non ho capito il punto 3 : i database vanno creati con phpmyadmin
    e qui imposti i tuoi parametri di connessione
    PHP:
    // mi connetto al database
    $sql = new mysqli("localhost""root""""database");
     
  4. leo_grafica

    leo_grafica Nuovo Utente

    Registrato:
    21 Novembre 2008
    Messaggi:
    3
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    forse ho fatto il passo più lungo della gamba...
    non ho mai lavorato prima con database e php...

    al punto 3 intendevo che ho scaricato i 3 file di esempio (gli elenchi regioni,province e comuni) e sono in una cartella ''comuni'' all'interno del sito

    ...adesso ho scaricato anche phpMyAdmin ma non ci capisco niente...

    mi puoi aiutare?
    puoi darmi qualche dritta step by step?

    grazie
     
  5. WottaFacca

    WottaFacca Utente Attivo

    Registrato:
    20 Marzo 2015
    Messaggi:
    134
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Località:
    Desenzano d/G
    Dalla pagina principale di phpmyadmin, ti basta creare il database e poi fare importa.

    Selezioni le 3 tabelle e poi crei i collegamenti nella pagina php, inserendo i dati come ha detto criric
     
  6. Domenico Cafaro

    Domenico Cafaro Nuovo Utente

    Registrato:
    3 Settembre 2013
    Messaggi:
    12
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Ciao, ho inserito queste select dinamiche in un form.
    Solo che quando il file php che invia la mail recupera i valori della select, non recupera il nome del comune ma il codice istat. Quindi nella mail mi compare il codice istat e non il nome del comune.

    Come faccio a fargli recuperare il nome del comune?

    Grazie in anticipo.
     
  7. criric

    criric Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    21 Agosto 2010
    Messaggi:
    5.607
    Mi Piace Ricevuti:
    54
    Punteggio:
    48
    Sesso:
    Maschio
    Località:
    TN
    Ciao, puoi modificare il value della ultima option cambiando $row['Istat'] con $row['Comune']
     
  8. Domenico Cafaro

    Domenico Cafaro Nuovo Utente

    Registrato:
    3 Settembre 2013
    Messaggi:
    12
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Ciao, ho provato.
    Ma quando seleziono il campo comune nella select questo sparisce non mantiene la selezione. E se provo ad inviare il form, la mail arriva con il campo comune vuoto.
     
  9. criric

    criric Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    21 Agosto 2010
    Messaggi:
    5.607
    Mi Piace Ricevuti:
    54
    Punteggio:
    48
    Sesso:
    Maschio
    Località:
    TN
    hai scritto cosi ?
    PHP:
    .append('<option $selected value=\"" . $row['Comune'] . "\">".utf8_encode(addslashes($row['Comune'])) . "</option>');";
    lo hai online o in locale ?
     
  10. Domenico Cafaro

    Domenico Cafaro Nuovo Utente

    Registrato:
    3 Settembre 2013
    Messaggi:
    12
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Ho effettuato la modifica così come l'hai scritta tu.

    Sto lavorando online.
     
  11. criric

    criric Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    21 Agosto 2010
    Messaggi:
    5.607
    Mi Piace Ricevuti:
    54
    Punteggio:
    48
    Sesso:
    Maschio
    Località:
    TN
    posta il link gli do un occhiata
     
  12. Domenico Cafaro

    Domenico Cafaro Nuovo Utente

    Registrato:
    3 Settembre 2013
    Messaggi:
    12
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    inviato in pvt
     
  13. criric

    criric Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    21 Agosto 2010
    Messaggi:
    5.607
    Mi Piace Ricevuti:
    54
    Punteggio:
    48
    Sesso:
    Maschio
    Località:
    TN
    potrebbe essere un problema di apici
    prova a cambiare
    PHP:
    $row['Comune']
    con
    PHP:
    utf8_encode(addslashes($row['Comune']))
     
  14. Domenico Cafaro

    Domenico Cafaro Nuovo Utente

    Registrato:
    3 Settembre 2013
    Messaggi:
    12
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Ho effettuato la modifica, ed ho modificato anche da

    PHP:
    if ($row['Istat'] == $comune)
    a

    PHP:
    if ($row['Comune'] == $comune)
    Adesso nella mail mi compare il nome del comune selezionato nel form, e nel form non scompare più il comune quando lo sleziono.

    Grazie per l'aiuto!!
     
  15. hantos

    hantos Nuovo Utente

    Registrato:
    17 Ottobre 2008
    Messaggi:
    21
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Salve ho scaricato lo script e funziona bene

    però quando devo trasferire i dati selezionati sul mio database invece del nome della regione mi scrive IdRegione

    il codice html lo modificato così
    HTML:
            <div class="ricerca">
                <form id="ricerca" method="POST"  action="formmail_prova.php">
                    <span>Regione :</span>
                    <select name="regione" name="nomeRegione">
                        <option value="regione"></option>
                    </select><br/>
                    <span>Provincia :</span>
                    <select name="provincia">
                        <option value=""></option>
                    </select> <br/>
                    <span>Comune :</span>
                    <select name="comune">
                        <option value=""></option>
                    </select>
    
               <br />
      <button name="B3" onClick="invia();" style="font-family: Bookman Old Style; color: #800000; font-weight: bold; border: 2px outset #F0F0FF; background-color: #FDEAAA; width:248; height:48">
      Invia i dati nel database</button></p>
    </form>
    
            </div>
    il php cosi
    PHP:
    <?php

    // recupero vaolori delle select
    $regione $_REQUEST['regione'];
    $provincia $_REQUEST['provincia'];
    $comune $_REQUEST['comune'];
    // mi connetto al database
    $sql = new mysqli("localhost""root""""database");
    // estraggo tutte le regioni
    $query "SELECT * FROM regioni";
    $result $sql->query($query);
    // svuoto la select regione
    echo "$('select[name=\"regione\"]').empty();";
    // aggiungo una option vuota
    echo "$('select[name=\"regione\"]').append('<option value=\"\"></option>');";
    // ciclo i risultati della query
    while ($row $result->fetch_array(MYSQLI_ASSOC)) {
        
    // imposto il selected sull'eventuale regione scelta
        
    $selected "";
        if (
    $row['idRegione'] == $regione) {
            
    $selected "selected=\"selected\"";
        }
        
    // popolo la select
        
    echo "$('select[name=\"regione\"]').append('<option $selected value=\"" $row['idRegione'] . "\">" addslashes($row['nomeRegione']) . "</option>');";
    }
    // se è stata scelta una regione
    if (!empty($regione)) {
        
    // estraggo le province della regione scelta
        
    $query "SELECT * FROM province WHERE idRegione ='$regione'";
        
    $result $sql->query($query);
        
    // svuoto la select provincia
        
    echo "$('select[name=\"provincia\"]').empty();";
        
    // aggiungo una option vuota
        
    echo "$('select[name=\"provincia\"]').append('<option value=\"\"></option>');";
        
    // ciclo i risultati della query
        
    while ($row $result->fetch_array(MYSQLI_ASSOC)) {
            
    // imposto il selected sull'eventuale provincia scelta
            
    $selected "";
            if (
    $row['siglaProvincia'] == $provincia) {
                
    $selected "selected=\"selected\"";
            }
            
    // popolo la select
            
    echo "$('select[name=\"provincia\"]').append('<option $selected value=\"" $row['siglaProvincia'] . "\">" addslashes($row['nomeProvincia']) . "</option>');";
        }
    }
    // se è stata scelta una provincia
    if (!empty($provincia)) {
        
    // estraggo i comuni della provincia scelta
        
    $query "SELECT * FROM comuni WHERE provincia ='$provincia'";
        
    $result $sql->query($query);
        
    // svuoto la select comune
        
    echo "$('select[name=\"comune\"]').empty();";
        
    // aggiungo una option vuota
        
    echo "$('select[name=\"comune\"]').append('<option value=\"\"></option>');";
        
    // ciclo i risultati della query
        
    while ($row $result->fetch_array(MYSQLI_ASSOC)) {
            
    // imposto il selected sull'eventuale comune scelto
            
    $selected "";
            if (
    $row['Istat'] == $comune) {
                
    $selected "selected=\"selected\"";
            }
            
    // popolo la select
            
    echo "$('select[name=\"comune\"]').append('<option $selected value=\"" $row['comune'] . "\">" utf8_encode(addslashes($row['Comune'])) . "</option>');";
        }
    }
    ?>
     
    Ultima modifica di un moderatore: 14 Novembre 2016
  16. criric

    criric Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    21 Agosto 2010
    Messaggi:
    5.607
    Mi Piace Ricevuti:
    54
    Punteggio:
    48
    Sesso:
    Maschio
    Località:
    TN
    Ciao, il value della select contiene l'id della regione ed è quello che viene passato come parametro.
    Ti converrebbe fare una query nella tua pagina formmail_prova.php e recuperare il nome dall'id
    PHP:
    $query "SELECT * FROM regioni WHERE idRegione = " . (int) $_REQUEST['idRegione'];
     
  17. hantos

    hantos Nuovo Utente

    Registrato:
    17 Ottobre 2008
    Messaggi:
    21
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    provo e riprovo ma non funziona, il codice con cui invio i dati al database è il seguente

    dove la query che mi hai indicato ?????, grazieeeee

    PHP:
    <?session_start();
    $titolo=$_POST[titolo];
    $regione=$_POST[regione];
    $nomeRegione=$_POST[nomeRegione];
    $province=$_POST[province];
    $provincia=$_POST[provincia];
    $comune=$_POST[comune];
    $citta=$_POST[citta];

    $visibile=$_POST[visibile];
    $_SESSION['categoria']=$categoria;


    include(
    "datastring.inc.php");



    $db mysql_connect($db_host$db_user$db_password);

    if (
    $db == FALSE)
    die (
    "Errore nella connessione");
    mysql_select_db($db_name$db)
    or die (
    "Errore nella selezione del database");

    $categoria=ucwords($categoria);
    $query "INSERT INTO dati (titolo,nomeRegione,regione,province,provincia,comune,citta,cap,categoria,visibile,data) VALUES ('$titolo','$nomeRegione','$regione','$province','$provincia','$comune','$citta','$cap','$categoria','$visibile',now())";


    if (
    mysql_query($query$db)){
    $_SESSION['ultimoid']=mysql_insert_id();
    echo 
    "$_SESSION[ultimoid]";

    echo 
    "L'articolo del $row[comune] è stato inserito correttamente<br>";
    echo 
    " mail('info@xzczcxxinea3000.com', 'Messaggio dal mio sito web', $nomecontatto)";

    }
    mysql_close($db);
    ?>
    <html>
     
    Ultima modifica di un moderatore: 15 Novembre 2016
  18. criric

    criric Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    21 Agosto 2010
    Messaggi:
    5.607
    Mi Piace Ricevuti:
    54
    Punteggio:
    48
    Sesso:
    Maschio
    Località:
    TN
    la query la devi inserire tu nel tuo file php prima di fare la insert. Togli i due name che hai messo nella select. Esegui la query ed estrai il nome della regione
    PHP:
    $nomeRegione $row['nomeRegione'];
     
  19. hantos

    hantos Nuovo Utente

    Registrato:
    17 Ottobre 2008
    Messaggi:
    21
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Salve Criric sto provando a fare la modifica che mi hai suggerito ma non riesco a farlo funzionare

    questo è il file che fa funzionare il form, se cambio qualcosa non funziona più

    PHP:
    <?php

    // recupero vaolori delle select
    $regione $_REQUEST['regione'];
    $provincia $_REQUEST['provincia'];
    $comune $_REQUEST['comune'];
    $CAP $_REQUEST['CAP'];
    // mi connetto al database
    $sql = new mysqli("********""********""********""********");
    // estraggo tutte le regioni
    $query "SELECT * FROM regioni";
    $result $sql->query($query);
    // svuoto la select regione
    echo "$('select[name=\"regione\"]').empty();";

    // aggiungo una option vuota
    echo "$('select[name=\"regione\"]').append('<option value=\"\"></option>');";


    // ciclo i risultati della query
    while ($row $result->fetch_array(MYSQLI_ASSOC)) {
        
    // imposto il selected sull'eventuale regione scelta
        
    $selected "";
        if (
    $row['idRegione'] == $regione) {
            
    $selected "selected=\"selected\"";
        }
       
    // popolo la select
        
    echo "$('select[name=\"regione\"]').append('<option $selected value=\"" $row['idRegione']. "\">" addslashes($row['nomeRegione']) . "</option>');";
    }



    // se è stata scelta una regione
    if (!empty($regione)) {
        
    // estraggo le province della regione scelta
        
    $query "SELECT * FROM province WHERE idRegione ='$regione'";
        
    $result $sql->query($query);
        
    // svuoto la select provincia
        
    echo "$('select[name=\"provincia\"]').empty();";
        
    // aggiungo una option vuota
        
    echo "$('select[name=\"provincia\"]').append('<option value=\"\"></option>');";
        
    // ciclo i risultati della query
        
    while ($row $result->fetch_array(MYSQLI_ASSOC)) {
            
    // imposto il selected sull'eventuale provincia scelta
            
    $selected "";
            if (
    $row['siglaProvincia'] == $provincia) {
                
    $selected "selected=\"selected\"";
            }
            
    // popolo la select
            
    echo "$('select[name=\"provincia\"]').append('<option $selected value=\"" $row['siglaProvincia'] . "\">" addslashes($row['nomeProvincia']) . "</option>');";
        }
    }
    // se è stata scelta una provincia
    if (!empty($provincia)) {
        
    // estraggo i comuni della provincia scelta
        
    $query "SELECT * FROM comuni WHERE provincia ='$provincia'";
        
    $result $sql->query($query);
        
    // svuoto la select comune
        
    echo "$('select[name=\"comune\"]').empty();";
        
    // aggiungo una option vuota
        
    echo "$('select[name=\"comune\"]').append('<option value=\"\"></option>');";
        
    // ciclo i risultati della query
        
    while ($row $result->fetch_array(MYSQLI_ASSOC)) {
            
    // imposto il selected sull'eventuale comune scelto
            
    $selected "";
            if (
    $row['Comune'] == $comune) {
                
    $selected "selected=\"selected\"";
            }
            
    // popolo la select
            
    echo "$('select[name=\"comune\"]').append('<option $selected value=\"" $row['Comune'] . "\">" utf8_encode(addslashes($row['Comune'])) . "</option>');";
        }
    }



    ?>
    mi poi aiutare grazie mille
     
    Ultima modifica di un moderatore: 15 Novembre 2016
  20. criric

    criric Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    21 Agosto 2010
    Messaggi:
    5.607
    Mi Piace Ricevuti:
    54
    Punteggio:
    48
    Sesso:
    Maschio
    Località:
    TN
    non devi modificare quel file ma quello che hai postato che fa la insert. Fai la query sulla tabella regioni con l'id che ti arriva in post e recuperi il nome poi fai la INSERT
    in pratica devi farla tra
    PHP:
    if ($db == FALSE)
    die (
    "Errore nella connessione");
    mysql_select_db($db_name$db)
    or die (
    "Errore nella selezione del database");
    e
    PHP:
    $categoria=ucwords($categoria);
    $query "INSERT INTO dati (titolo,nomeRegione,regione,province,provincia,comune,citta,cap,categoria,visibile,data) VALUES ('$titolo','$nomeRegione','$regione','$province','$provincia','$comune','$citta','$cap','$categoria','$visibile',now())";
     
Sto caricando...

Condividi questa Pagina