- Home
- Categorie
- Coding e Sistemistica
- Coding
- Menù a cascata:
-
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?
-
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.
-
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)?
-
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, comuneLe 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???
-
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?
-
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
-
Perchè il select è sprovvisto di attributo name, ma hai messo esclusivamente l'id. Per cui php non riceve quel valore.
-
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]