• User Attivo

    Menù a cascata:

    E' possibile creare -solamente usando PHP senza jQuey- un menù a cascata?
    Volevo sapere se fosse possibile avere un primo form SELECT collegato al database, es.
    [PHP]
    <form id="gabbia" name="gabbia" method="post" action=""><select name="utenti" size="10" id="utenti">
    <?php
    $risultato=mysql_query("SELECT id, nome FROM utenti", $conn);

    if (!$risultato){ die("La tabella selezionata non esiste " . mysql_error());}

    while ($riga=mysql_fetch_array($risultato)){
    $id = $riga["id"];$nome= $riga["nome"];$qqq = "<option value= "" . $id . "">" . $nome . "</option>";echo $qqq;}?>
    </select></form>[/PHP]
    A seconda della voce selezionata popola un secondo form SELECT. Cliccando un elemento del secondo Select, si preme un pulsante submit e posso visualizzare i dati di una terza tabella collegata.
    E' possibile? 😄


  • ModSenior

    Ciao nofcfro,
    Il far mostrare il secondo select con i dati che dipendono dal primo deve essere fatto per forza in javascript. Altrimenti dovresti fare l'invio del form appena scelto il primo select, e restituire poi un secondo form con il secondo select.
    È sicuramente meglio usare javascript, per semplificare la navigazione dell'utente nelle pagine.


  • User Attivo

    Vada per il javascript! Spulciando nel Web ho trovato alcuni siti che mostrano il codice del menù a cascata di regioni-provincie-comuni. Tuttavia il codice javascript che viene inserito tra i tag <head> in alcune pagine è abbastanza complicato da modificare manualmente, così mi chiedevo se ci fosse un metodo con Dreamweaver (come ad esempio la funzione "comportamenti" in Dreaweaver mette a disposizione alcune possibilità come lo scambio di immagini ecc)?


  • User Attivo

    Ho trovato in rete questo menù a cascata Regioni-Province-Comuni. La struttura su MySQL è questa:

    Tabella: REGIONI; campi id_reg, nome_regione
    Tabella: PROVINCE: id_pro, id_reg2, nome_province
    Tabella COMUNI: id_com, id_pro2, cap, comune

    Le pagine sono essenzialmente tre:
    #1 - index.php
    (create da regioniProvinceComuni.zipcreato da Maurizio Tarchini infomtxweb[dot]ch
    per Your Inspiration Web )
    [PHP]<html>
    <head>
    <script type="text/javascript" src="jquery-1.3.2.js"></script>
    <script type="text/javascript">
    $(document).ready(function(){
    var scegli = '<option value="0">Scegli...</option>';
    var attendere = '<option value="0">Attendere...</option>';
    $("select#province").html(scegli);
    $("select#province").attr("disabled", "disabled");
    $("select#comuni").html(scegli);
    $("select#comuni").attr("disabled", "disabled");
    $("select#regioni").change(function(){
    var regione = $("select#regioni option:selected").attr('value');
    $("select#province").html(attendere);
    $("select#province").attr("disabled", "disabled");
    $("select#comuni").html(scegli);
    $("select#comuni").attr("disabled", "disabled");
    $.post("select.php", {id_reg:regione}, function(data){
    $("select#province").removeAttr("disabled");
    $("select#province").html(data);
    });
    });
    $("select#province").change(function(){
    $("select#comuni").attr("disabled", "disabled");
    $("select#comuni").html(attendere);
    var provincia = $("select#province option:selected").attr('value');
    $.post("select.php", {id_pro:provincia}, function(data){
    $("select#comuni").removeAttr("disabled");
    $("select#comuni").html(data);
    });
    });
    });
    </script></head><?phpinclude_once 'select.class.php';$opt = new SelectList();?><body>
    <div id="container">
    <h1>La cascata regioni - province - comuni</h1>
    <h2>Seleziona una regione e nella select successiva compariranno le province di quella regione</h2>
    <h3>Selezionando una provincia, nella select successiva compariranno i comuni di quella provincia</h3>
    <form action="?" id="myform">
    Seleziona una regione:<br />
    <select id="regioni">
    <?php echo $opt->ShowRegioni(); ?>
    </select>
    <br /><br />
    Seleziona una provincia:<br />
    <select id="province">
    <option>Scegli...</option>
    </select>
    <br /><br />
    Seleziona un comune:<br />
    <select id="comuni">
    <option>Scegli...</option>
    </select>
    </div>
    </form>
    </body>
    </html>[/PHP]

    #2 - select.php
    [PHP]<?php
    include_once 'select.class.php';$opt = new SelectList();
    if(isset($_POST['id_reg'])){ echo $opt->ShowProvince(); die;}
    if(isset($_POST['id_pro'])){ echo $opt->ShowComuni(); die;}

    ?>[/PHP]

    #3 - select.class.php
    [PHP]<?php
    class SelectList
    {
    protected $conn;
    public function __construct()
    {
    $this->DbConnect();
    }
    protected function DbConnect()
    {
    include "db_config.php";
    $this->conn = mysql_connect($host,$user,$password) OR die("Impossibile connettersi al database");
    mysql_select_db($db,$this->conn) OR die("Impossibile selezionare il database $db");
    return TRUE;
    }
    public function ShowRegioni()
    {
    $sql = "SELECT * FROM regioni";
    $res = mysql_query($sql,$this->conn);
    $regioni = '<option value="0">scegli...</option>';
    while($row = mysql_fetch_array($res))
    {
    $regioni .= '<option value="' . $row['id_reg'] . '">' . utf8_encode($row['nome_regione']) . '</option>';
    }
    return $regioni;
    }
    public function ShowProvince()
    {
    $sql = "SELECT * FROM province WHERE province.id_reg2=$_POST[id_reg]";
    $res = mysql_query($sql,$this->conn);
    $province = '<option value="0">scegli...</option>';
    while($row = mysql_fetch_array($res))
    {
    $province .= '<option value="' . $row['id_pro'] . '">' . utf8_encode($row['nome_provincia']) . '</option>';
    }
    return $province;
    }
    public function ShowComuni()
    {
    $sql = "SELECT * FROM comuni WHERE comuni.id_pro2=$_POST[id_pro]";
    $res = mysql_query($sql,$this->conn);
    $comuni = '<option value="0">scegli...</option>';
    while($row = mysql_fetch_array($res))
    {
    $comuni .= '<option value="' . $row['id_com'] . '">' . $row['cap'] . ' - ' . utf8_encode($row['comune']) . '</option>';
    }
    return $comuni;
    }}
    ?>[/PHP]

    Ovviamente funziona tutto così.
    La faccenda diventa (per me) strana qualora io rinomino la tabella PROVINCE (ad es. col nome CICALE) su Mysql e quindi nella apposita query SELECT (mantenendo il resto completamente identico).
    Quale altre parametro va modificato oltre MySQL e la query SELECT per far funzionare il menù a cascata rinominando la seconda tabella???


  • User Attivo

    Con questo schema si hanno tre menù a tendina o ad elenco interconnessi, ma i valori del terzo invece di averli nel menù a tendina si possono avere sotto forma di tabella? Va modificato in index.php
    [PHP] Seleziona un comune:<br />
    <select id="comuni">
    <option>Scegli...</option>
    </select>[/PHP]
    ed in select.class.php questa riga
    [PHP]$comuni .= '<option value="' . $row['id_com'] . '">' . $row['cap'] . ' - ' . utf8_encode($row['comune']) . '</option>';[/PHP]
    ma come? :arrabbiato:


  • User Attivo

    Salve,
    ripropongo al volo le tre pagine (modificate):

    #1* select.php
    [PHP]<?php
    include_once 'select.class.php';$opt = new SelectList();
    if(isset($_POST['id_reg'])){ echo $opt->ShowProvince(); die;}
    if(isset($_POST['id_pro'])){ echo $opt->ShowComuni(); die;}

    ?>[/PHP]

    #2select.class.php*
    [PHP]<?php
    class SelectList
    {
    protected $conn;
    public function __construct()
    {
    $this->DbConnect();
    }
    protected function DbConnect()
    {
    include "db_config.php";
    $this->conn = mysql_connect($host,$user,$password) OR die("Impossibile connettersi al database");
    mysql_select_db($db,$this->conn) OR die("Impossibile selezionare il database $db");
    return TRUE;
    }
    public function ShowRegioni()
    {
    $sql = "SELECT * FROM regioni";
    $res = mysql_query($sql,$this->conn);
    $regioni = '<option value="0">scegli...</option>';
    while($row = mysql_fetch_array($res))
    {
    $regioni .= '<option value="' . $row['id_reg'] . '">' . utf8_encode($row['nome_regione']) . '</option>';
    }
    return $regioni;
    }
    public function ShowProvince()
    {
    $sql = "SELECT * FROM province WHERE province.id_reg2=$_POST[id_reg]";
    $res = mysql_query($sql,$this->conn);
    $province = '<option value="0">scegli...</option>';
    while($row = mysql_fetch_array($res))
    {
    $province .= '<option value="' . $row['id_pro'] . '">' . utf8_encode($row['nome_provincia']) . '</option>';
    }
    return $province;
    }
    public function ShowComuni()
    {
    $sql = "SELECT * FROM comuni WHERE comuni.id_pro2=$_POST[id_pro]";
    $res = mysql_query($sql,$this->conn);
    $comuni = '<option value="0">scegli...</option>';
    while($row = mysql_fetch_array($res))
    {
    $comuni .= '<option value="' . $row['id_com'] . '">' . $row['cap'] . ' - ' . utf8_encode($row['comune']) . '</option>';
    }
    return $comuni;
    }}
    ?>[/PHP]

    #3* index.php*
    [HTML]
    <head>
    <script type="text/javascript" src="jquery-1.3.2.js"></script>
    <script type="text/javascript">
    $(document).ready(function(){
    var scegli = '<option value="0">Scegli...</option>';
    var attendere = '<option value="0">Attendere...</option>';
    $("select#province").html(scegli);
    $("select#province").attr("disabled", "disabled");
    $("select#comuni").html(scegli);
    $("select#comuni").attr("disabled", "disabled");
    $("select#regioni").change(function(){
    var regione = $("select#regioni option:selected").attr('value');
    $("select#province").html(attendere);
    $("select#province").attr("disabled", "disabled");
    $("select#comuni").html(scegli);
    $("select#comuni").attr("disabled", "disabled");
    $.post("select.php", {id_reg:regione}, function(data){
    $("select#province").removeAttr("disabled");
    $("select#province").html(data);
    });
    });
    $("select#province").change(function(){
    $("select#comuni").attr("disabled", "disabled");
    $("select#comuni").html(attendere);
    var provincia = $("select#province option:selected").attr('value');
    $.post("select.php", {id_pro:provincia}, function(data){
    $("select#comuni").removeAttr("disabled");
    $("select#comuni").html(data);
    });
    });
    });
    </script></head><?phpinclude_once 'select.class.php';$opt = new SelectList();?><body>
    <div id="container">
    <h1>La cascata regioni - province - comuni</h1>
    <h2>Seleziona una regione e nella select successiva compariranno le province di quella regione</h2>
    <h3>Selezionando una provincia, nella select successiva compariranno i comuni di quella provincia</h3>
    <form action="?" id="myform">
    Seleziona una regione:<br />
    <select id="regioni">
    <?php echo $opt->ShowRegioni(); ?>
    </select>
    <br /><br />
    Seleziona una provincia:<br />
    <select id="province">
    <option>Scegli...</option>
    </select>
    <br /><br />
    <!-- MODIFICATO RISPETTO ALL'ORIGINALE -->

    <input type="submit" name="modifica" id="modifica" value="Modifica">  </p>  <p><?php	if (isset($_POST["province"]))	{	echo "prov";		}	?></p></form></body>[/HTML]
    

    Perché (proprio qua sopra) se uso [PHP]<?php if (isset($_POST["province"])) {echo "prov";}?>[/PHP] non ottengo la scritta "prov"?
    Grazie 🙂


  • ModSenior

    Perchè il select è sprovvisto di attributo name, ma hai messo esclusivamente l'id. Per cui php non riceve quel valore.


  • User Attivo

    Giusto, tuttavia neppure con il name! Io credo sia dovuto al javascript 😞
    [HTML]<form action="" name="myform" id="myform">
    <table width="100%" border="0" align="center" cellpadding="0" cellspacing="30">
    <tr>
    <td width="58%" align="left"><strong>Seleziona XXX:</strong><br />
    <select name="xxx" id="xxx">
    <?php echo $opt->ShowCondomini(); ?>
    </select></td>
    <td width="42%" align="left"><strong>Seleziona YYY:</strong><br />
    <select name="yyy" id="yyy">
    <option>Scegli...</option>
    </select>
    <br /></td>
    </tr>
    <tr align="center">
    <td colspan="2" align="right"><input type="submit" name="modifica" id="modifica" value="Vedi dettagli" /></td>
    </tr>
    <tr align="center">
    <td colspan="2" align="right">
    <?php if (isset($_POST["yyy"])) { echo "a"; } ?>[/HTML]