Menù

Demo

Regione :
Provincia :
Comune :
  • aggiornato il 07/03/2025 13:59:15

Top 5

Regioni Province Comuni

Select dinamiche, il classico esempio dei comuni italiani.

Sono necessarie 3 tabelle mysql presenti nello zip di questo esempio.

Le tabelle sono state generate da un file di testo reperibile sul sito comuni-italiani.it a questo indirizzo.

Tuttavia l'ultimo aggiornamento segnalato nella pagina risale al 22/08/2011, potrebbero mancare pertanto alcuni nuovi comuni.

index.html

<html>
    <head>
        <title>title</title>
        <meta charset="UTF-8">
        <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
        <style>
            div.ricerca {
                line-height: 34px;
            }
            div.ricerca span {
                display: inline-block;
                width: 110px;
                text-align: right;
                padding-right: 4px;
            }
        </style>
        <script>
            $(document).ready(function () {
                comuni();
                $("select").change(function () {
                    comuni();
                })
            })
            function comuni() {
                $.ajax({
                    type: "POST",
                    url: "/demos/regioni_province_comuni/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>

La pagina comuni.php genera il codice javascript che verrà eseguito dalla funzione eval() nella chiamata ajax.

<?php

include 'config.php';
//ini_set('error_reporting', E_ALL);
//ini_set('display_errors', true);
// recupero vaolori delle select
$regione = isset($_REQUEST['regione']) ? $_REQUEST['regione'] : "";
$provincia = isset($_REQUEST['provincia']) ? $_REQUEST['provincia'] : "";
$comune = isset($_REQUEST['comune']) ? $_REQUEST['comune'] : "";
// mi connetto al database
$sql = new mysqli(DB_HOST_DEMO, DB_USER_DEMO, DB_PSWD_DEMO, DB_NAME_DEMO);
// 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>');";
    // 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 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'] . "\">" . addslashes($row['Comune']) . "</option>');";
    }
}

Aggiornamento 20 settembre 2014


Grazie alle vostre segnalazioni mi sono accorto che nel codice php formattato, non venivano riportati correttamente i backslash, di conseguenza, con il copia/incolla, lo script generava degli errori javascript.


criric

Mi sono appassionato di programmazione web a 34 anni, un pò tardi, da allora però non perdo mai occasione per imparare qualcosa di nuovo in questi campi.

Inserisci un commento

Codice antispam

Categorie

Comunicazioni

Puoi utilizzare questo modulo per qualsiati tipo di segnalazione.

Codice antispam

 

I dati di questo modulo non verranno pubblicati.