Select dinamiche : regioni province comuni

Stato
Chiusa ad ulteriori risposte.

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
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:

leo_grafica

Nuovo Utente
21 Nov 2008
3
0
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!!
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
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");
 

leo_grafica

Nuovo Utente
21 Nov 2008
3
0
0
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");

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
 

WottaFacca

Utente Attivo
20 Mar 2015
134
0
0
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
 

Domenico Cafaro

Nuovo Utente
3 Set 2013
12
0
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.
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao, puoi modificare il value della ultima option cambiando $row['Istat'] con $row['Comune']
 

Domenico Cafaro

Nuovo Utente
3 Set 2013
12
0
0
Ciao, puoi modificare il value della ultima option cambiando $row['Istat'] con $row['Comune']

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.
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
hai scritto cosi ?
PHP:
.append('<option $selected value=\"" . $row['Comune'] . "\">".utf8_encode(addslashes($row['Comune'])) . "</option>');";
lo hai online o in locale ?
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
potrebbe essere un problema di apici
prova a cambiare
PHP:
$row['Comune']
con
PHP:
utf8_encode(addslashes($row['Comune']))
 

Domenico Cafaro

Nuovo Utente
3 Set 2013
12
0
0
potrebbe essere un problema di apici
prova a cambiare
PHP:
$row['Comune']
con
PHP:
utf8_encode(addslashes($row['Comune']))

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

hantos

Nuovo Utente
17 Ott 2008
21
0
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:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
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'];
 

hantos

Nuovo Utente
17 Ott 2008
21
0
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('[email protected]', 'Messaggio dal mio sito web', $nomecontatto)";

}
mysql_close($db);
?>

<html>
 
Ultima modifica di un moderatore:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
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'];
 

hantos

Nuovo Utente
17 Ott 2008
21
0
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:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
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())";
 
Stato
Chiusa ad ulteriori risposte.
Discussioni simili
Autore Titolo Forum Risposte Data
H [PHP] Select dinamiche : regioni province comuni PHP 2
L Select Dinamiche...da txt? PHP 3
eraclio666 [PHP] 2 SELECT DINAMICHE PHP 8
G [Javascript] select dinamiche Javascript 0
H select dinamiche php mysql PHP 4
H problema con select dinamiche e javascript Javascript 0
W Select dinamiche PHP 3
S Select dinamiche concatenate Ajax 8
F Problema select dinamiche con php e jquery jQuery 1
Z Select dinamiche PHP MySQL Javascript PHP 1
R select dinamiche che riportano valori in una textarea. Javascript 8
M select dinamiche con Jquery e php jQuery 9
V Select dinamiche in php PHP 1
L Select dinamiche - stampa ID e non il valore PHP 3
F Select Dinamiche in fase di modifica Classic ASP 1
L Aiuto per select dinamiche in asp Classic ASP 3
F Select dinamiche con ASP & AJAX Ajax 11
A select dinamiche, errore assurdo, non compare la terza select Javascript 0
J Select automatiche o dinamiche PHP 3
L Ripetere Campi disabilitando input in riferimento ad un valore della select jQuery 0
otto9due Ordinare option di una select Javascript 5
W MySQL ciclo in SELECT MySQL 0
W MySQL SELECT list dinamica MySQL 0
M Select Option dentro una Table jQuery 2
G Colorare menu select attraverso ricerca php PHP 0
L problema con query select PHP 2
F menù select dinamico da db in php PHP 3
D popolare campi tra th alla select PHP 36
M Estrarre valore con SELECT COUNT PHP 0
M Creare un campo input select quantità di un numero intero prelevato dal db PHP 3
E Php select option e ajax PHP 23
R Select concatenata che non funziona la seconda volta Ajax 3
L select join e sottrazione punti PHP 13
L input dati con inser into select ? PHP 4
V hierarchy-select jQuery 0
Emix Select concatenate php sql ajax PHP 2
F query e form con select multipla PHP 17
T recupero valori select multipla da android Javascript 3
J php, scegliere autista da select e mostrare se ha fatto un incidente PHP 8
Tommy03 Select in ordine per numero di record MySQL 7
T problema con select dinamica con jquery Javascript 0
J Far comparire e scomparire un div con un select Javascript 1
M Opzioni select da 1 a 200 PHP 0
I Fatal error: Query Failed! SQL: SELECT * INTO OUTFILE PHP 1
C input in sostituzione della select PHP 2
G Insert into select - Aiuto MySQL 0
max1974 autocomplete trigger select jQuery 0
X [Select] Valori chiave non presenti in un'altra tabella MySQL 2
M Estrarre dati da una select HTML PHP 3
MarcoGrazia jquery validate, necessità di validare almeno un elemento select su due jQuery 1

Discussioni simili