Come creare <select> correlate?

Salve a tutti, ho seguito tutte le vostre guide ed ho fatto anche tanti applicativi, quindi un grazie doveroso.

Detto questo veniamo a noi, il mio problema con gli <option> corelati, mi spiego vorrei che al cambiare ad esempio del <option>lazio</option> cambiasse la lista del seguente <option>roma</option> ecc, ho trovato alcune guide ma inconcludenti.

inviato 4 anni fa
naruto1234
modificato 4 anni fa
Gianni Tomasicchio
X 1 X

Ti riporto uno script di esempio su come realizzare tre <select> a cascata. La struttura dati da cui attingo i valori costituita da semplici array ma tu potrai facilmente sostituirla anche con dati prelevati dal database.

<?php
$elenco_province = array(
   1 => array(1 => 'Bari', 'Lecce'),
   2 => array(3 => 'Matera', 'Potenza')
);
$elenco_comuni = array(
   1 => array(1 => 'Bari', 'Bitonto'),
   2 => array(3 => 'Gallipoli', 'Lecce'),
   3 => array(5 => 'Matera', 'Pisticci'),
   4 => array(7 => 'Melfi', 'Potenza'),
);
$province = array();
$comuni = array();
if (!empty($_POST['regione'])) {
   $province = $elenco_province[$_POST['regione']];
}
if (!empty($_POST['provincia']) && isset($province[$_POST['provincia']])) {
   $comuni = $elenco_comuni[$_POST['provincia']];
}
?>
<!DOCTYPE html>
<form id="form1" method="post" action="">
    <label>Regione:
        <select name="regione" id="regione" onchange="document.getElementById('form1').submit()">
            <option value="">seleziona la regione...</option>
            <option value="1" <?if ($_POST['regione'] == 1) echo'selected'?>>Puglia</option>
            <option value="2" <?if ($_POST['regione'] == 2) echo'selected'?>>Basilicata</option>
        </select>
    </label>
    <br>
    <label>Provincia:
        <select name="provincia" id="provincia" onchange="document.getElementById('form1').submit()">
            <option value="">seleziona la provincia...</option>
     <?foreach ($province as $id => $nome): ?>
            <option value="<?=$id?>" <?if ($_POST['provincia'] == $id) echo'selected'?>><?=$nome?></option>
     <? endforeach?>
        </select>
    </label>
    <br>
    <label>Comune:
        <select name="comune" id="comune">
            <option value="">seleziona il comune...</option>
     <?foreach ($comuni as $id => $nome): ?>
            <option value="<?=$id?>"><?=$nome?></option>
     <? endforeach?>
        </select>
    </label>
    <br>
</form>

Il codice piuttosto semplice, ti segnalo comunque la seguente riga che nell'IF prevede una seconda condizione per evitare incongruenze tra regione e comune:

if (!empty($_POST['provincia']) && isset($province[$_POST['provincia']])) {

risposto 4 anni fa
Gianni Tomasicchio
Grazie tantissime della risposta, ma ho provato ad usare il codice, ma qualsiasi cosa selezioni ritorna alla pagina di selezione, vanificando ogni mio tentativo, sei sicuro che sia esatto il codice?naruto1234 4 anni fa
@naruto1234 L'ho appena provato su Explorer 10, Firefox 17 e Chrome 23. Nessun problema. Utilizzo Apache 2 + PHP 5.3 ma non penso sia influente.Gianni Tomasicchio 4 anni fa
Cavolo uso le tue stesse impostazioni, non capisco proprio perchè non mi funziona :Snaruto1234 4 anni fa
X 0 X

ciao ho trovato sempre sul forum questa risposta, mi funziona perfettamente, solo altro problema, dato che io dovrei inserire questi select sincronizzati gai in un form di registrazione, tipo l'esempio del corso php con mysql, non mi funziona, se lo tiro fuori dal form e lo metto su una pagina singola invece si. C' un sistema per integrare i due <form>.

<?php
$link = mysql_connect('localhost', 'root', 'secret');
if (!$link) {
    die ('Non riesco a connettermi: ' . mysql_error());
} 

$db_selected = mysql_select_db('italia', $link);
if (!$db_selected) {
    die ("Errore nella selezione del database: " . mysql_error());
}
$regioni = array();
$province = array();
$comuni = array();
$result = mysql_query("SELECT idregione, nomeregione FROM regioni");
while ($row = mysql_fetch_assoc($result)) {
    $regioni[$row['idregione']] =  $row['nomeregione'];
}
$regione_selezionata = isset($_POST['selRegione']) ? $_POST['selRegione'] : "";
$provincia_selezionata = isset($_POST['selProvincia']) ? $_POST['selProvincia'] : "";
$comune_selezionato = isset($_POST['selComune']) ? $_POST['selComune'] : "";
if($regione_selezionata) {
   $result = mysql_query("SELECT idprovincia, nomeprovincia FROM province WHERE idregione = " . $regione_selezionata);
   while ($row = mysql_fetch_assoc($result)) {
       $province[$row['idprovincia']] =  $row['nomeprovincia'];
   }
}
if($regione_selezionata && $provincia_selezionata) {
   $result = mysql_query("SELECT idcomune, nomecomune FROM comuni WHERE idprovincia = " . $provincia_selezionata);
   while ($row = mysql_fetch_assoc($result)) {
       $comuni[$row['idcomune']] =  $row['nomecomune'];
   }
}
include "template.php";
function genera_options($options, $chiave_selezionata) {
   foreach($options as $chiave => $valore) {
      $sel = $chiave == $chiave_selezionata ? 'selected="selected"' : '';
      echo '<option value="'.$chiave.'" '.$sel.'>'.$valore."</option>\n";
   }
}
?>

template.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Conforming XHTML 1.0 Strict Template</title>
</head>
<body>
<form action="" method="post" id="form1">
   <fieldset>
      <legend>Select dinamiche</legend>
      <label for="selRegione">Regione:</label><br />
      <select name="selRegione" id="selRegione" onchange="document.getElementById('form1').submit()">
      <option value="">seleziona la regione...</option>
      <?php genera_options($regioni,$regione_selezionata)?>
      </select>
      <br />
      <br />
      <label for="selProvincia">Provincia:</label><br />
      <select name="selProvincia" id="selProvincia" onchange="document.getElementById('form1').submit()">
      <option value="">seleziona la provincia...</option>
      <?php genera_options($province,$provincia_selezionata)?>
      </select>
      <br />
      <br />
      <label for="selComune">Comune:</label><br />
      <select name="selComune" id="selComune" onchange="document.getElementById('form1').submit()">
      <option value="">seleziona il comune...</option>
      <?php genera_options($comuni,$comune_selezionato)?>
      </select>
   </fieldset>
</form>
</body>
</html>
risposto 4 anni fa
naruto1234
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda