Select concatenate Regioni-Province-Comuni (con Variazione)

nofcfro

Utente Attivo
27 Mag 2012
72
0
6
Salve a tutti!
Da questo sito:

wwwPUNTOyourinspirationwebPUNTOcom/2010/09/09/come-realizzare-delle-select-concatenate-con-php-e-jquery/

è possibile scaricare l'esempio di select concatenate Regioni->Province->Comuni. Lo schema proposto in questo esempio è il seguente:
Prima Select Regione (popolata dal database) -> chiamata Ajax che popola la Seconda Select Province (sempre popolata dal database) -> chiamata Ajax che popola la Terza Select Comuni (sempre popolata dal database).
A me servirebbe che il terzo popolamento non andasse sotto forma di select bensì mi stampasse a video in una tabella o div tutti i comuni della provincia selezionata.
Qualcuno può darmi una mano? :)
 
Puoi provare cosi

in select.class.php modifichi il metodo ShowComuni in questo modo
PHP:
public function ShowComuni()
		{
			$sql = "SELECT * FROM comuni WHERE id_pro=$_POST[id_pro]";
			$res = mysql_query($sql,$this->conn);
			$comuni = "";			
				while($row = mysql_fetch_array($res))
				{
					$comuni .= '<tr><td>' . $row['id_com'] . '</td><td>' . $row['cap'] . '</td><td>' . utf8_encode($row['comune']) . '</td></tr>';
				}                        
			return $comuni;
		}
in index.php modifichi la select dei comuni cosi;:
HTML:
<table id="comuni">
			
</table>
e la chiamata jquery cosi:
Codice:
$("select#province").change(function(){
			
			$("table#comuni").html(attendere);
			var provincia = $("select#province option:selected").attr('value');
			$.post("select.php", {id_pro:provincia}, function(data){
				
				$("table#comuni").html(data);	
			});
		});

personalizza la tabella con i css
 
Ma una domanda: perché nella select.class.php la variabile $comuni = ""; rimane vuota?
E come faccio a creare una tabella più complessa? Ad esempio a più righe? Io ho messo:

PHP:
$comuni.=   '<table width="100%"><tr><td>' . $row['ccc'] . '</td></tr>' . '<tr><td>' . $row['aaa'] . '</td></tr><tr><td>' . $row['bbb'] . '</td></tr></table>';

Grazie! ;)
 
la variabile $comuni = ""; rimane vuota?

Viene inizializzata vuota per non generare un warning ma poi concatenata nel ciclo con le varie <tr>

$comuni.= ( punto uguale ) serve per concatenare una stringa

Nel ciclo non devi mettere <table> perche la hai gia nell'html della index

se vuoi essere piu ordinato puoi scrivere cosi

PHP:
public function ShowComuni()
		{
			$sql = "SELECT * FROM comuni WHERE id_pro=$_POST[id_pro]";
			$res = mysql_query($sql,$this->conn);
			$comuni = "";			
				while($row = mysql_fetch_array($res))
				{
					$comuni.= '<tr>';
                                        $comuni.= '<td>' . $row['id_com'] . '</td>';
                                        $comuni.= '<td>' . $row['cap'] . '</td>';
                                        $comuni.= '<td>' . utf8_encode($row['comune']) . '</td>';
                                        $comuni.= '</tr>';
				}                        
			return $comuni;
		}
 
Grazie, sempre perfetto :)
Penso che anche quest'altra domanda possa tornare utile a molti utenti: se ho delle tabelle "player01, player02, ecc" che contengono le caratteristiche di ogni giocatore, se genero un codice come quello che segue, nella pagina principale non mi vengono visualizzate tutte le tabelle contenenti dati, ma solamente l'ultima! Come si può risolvere??
Grazie anticipatamente :)
PHP:
//utente01
			$sql = "SELECT player01.* FROM player01 WHERE player01.idutenticon_tblutenticon=$_POST[idutenticon]";
            $res = mysql_query($sql,$this->conn);
            $player= "";            
                while($row = mysql_fetch_array($res))
                {
                    $player.= '<tr>';
                                        $player.= '<td>' . '<strong>Occhi: </strong>' . $row['occhi'] . '</td>';
                                        $player.= '<td>' . '<strong>Capelli: </strong>' . $row['capelli'] . '</td>';
                    $player.= '</tr><tr>';
                                        $player.= '<td>' . '<strong>Viso: </strong>' . $row['viso'] . '</td>';
                                        $player.= '<td>' . '<strong>Altezza: </strong>' . $row['altezza'] . '</td>';
                    $player.= '</tr>';               
			}        
		
		//utente02
			$sql = "SELECT player02.* FROM player02 WHERE player02.idutenticon_tblutenticon=$_POST[idutenticon]";
            $res = mysql_query($sql,$this->conn);
            $player= "";            
                while($row = mysql_fetch_array($res))
                {
                    $player.= '<tr>';
                                        $player.= '<td>' . '<strong>Occhi: </strong>' . $row['occhi2'] . '</td>';
                                        $player.= '<td>' . '<strong>Capelli: </strong>' . $row['capelli2'] . '</td>';
                    $player.= '</tr><tr>';
                                        $player.= '<td>' . '<strong>Viso: </strong>' . $row['viso2'] . '</td>';
                                        $player.= '<td>' . '<strong>Altezza: </strong>' . $row['altezza2'] . '</td>';
                    $player.= '</tr>';               
			}

Ad esempio se ho la tabella "player01" e "player02" con dati, perché viene visualizzata solo la seconda?
 
Ultima modifica:
Nuovo problema nuova discussione

ripostala pero nella sezione di PHP

e cmq non ho capito molto
 
Non posso aprire una nuova discussione perché questo problema PHP credo sia legato alla struttura della chiamata Ajax.
Tento però di spiegarmi meglio.

Se io avessi invece che un'unica tabella "comuni" tante tabelle denominate "comune1", "comune2", ecc:

PHP:
public function ShowComuni()
        {
            $sql = "SELECT tblcomune1.* FROM tblcomune1 WHERE id_pro=$_POST[id_pro]";
            $res = mysql_query($sql,$this->conn);
            $comuni = "";            
                while($row = mysql_fetch_array($res))
                {
                    $comuni.= '<tr>';
                                        $comuni.= '<td>' . $row['id_com1'] . '</td>';
                                        $comuni.= '<td>' . $row['cap1'] . '</td>';
                                        $comuni.= '<td>' . utf8_encode($row['comune1']) . '</td>';
                                        $comuni.= '</tr>';
                }   
            $sql = "SELECT tblcomune2.* FROM tblcomune2 WHERE id_pro=$_POST[id_pro]";
            $res = mysql_query($sql,$this->conn);
            $comuni = "";            
                while($row = mysql_fetch_array($res))
                {
                    $comuni.= '<tr>';
                                        $comuni.= '<td>' . $row['id_com2'] . '</td>';
                                        $comuni.= '<td>' . $row['cap2'] . '</td>';
                                        $comuni.= '<td>' . utf8_encode($row['comune2']) . '</td>';
                                        $comuni.= '</tr>';
                }
            $sql = "SELECT tblcomune3.* FROM tblcomune3 WHERE id_pro=$_POST[id_pro]";
            $res = mysql_query($sql,$this->conn);
            $comuni = "";            
                while($row = mysql_fetch_array($res))
                {
                    $comuni.= '<tr>';
                                        $comuni.= '<td>' . $row['id_com3'] . '</td>';
                                        $comuni.= '<td>' . $row['cap3'] . '</td>';
                                        $comuni.= '<td>' . utf8_encode($row['comune3']) . '</td>';
                                        $comuni.= '</tr>';
                }                     
            return $comuni;
        }

E tutte queste tabelle "comune1", "comune2", ecc sono popolate, utilizzando il codice che gentilmente prima mi hai postato ottengo come risultato solo la tabella col comune3! Mentre io vorrei che mi elencasse la tabella col comune1, la tabella col comune2, la tabella col comune3!
Se invece utilizzo il vecchio codice con le select concatenate del mio primo post, ottengo che al cliccare il menù delle province mi si popola il menù dei comuni con la prima select che è comune1, la seconda select che è comune2, ecc.
E' che è difficile spiegarsi bene quando si parla di queste cose! Spero di essermi espresso meglio questa volta :D
 
altra variazione

Buongiorno!!e grazie di avermi indicato questa discussione, che non avevo trovato scusate se ne ho aperta una sullo stesso argomento.

io avrei un problema diverso:

dovrei stampare a video il comune selezionato, dopo la selezione a cascata e visualizzare anche gli altri dati di quel comune.
ecco il ragionamento
1.dovrei aggiungere una funzione in select.class per tirare fuori i dati dopo la selezione del comune
2.aggiungere la chiamata nello script della index per visualizzare i dati.

ho provato a inserire nella index:
PHP:
--$("select#comuni").change(function(){
			
			$("table#comune").html(attendere);
			var comune = $("select#comuni option:selected").attr('value');
			$.post("select.php", {id_com:comuni}, function(data){
				
				$("table#comune").html(data);	
			});
		});
--

nel select.php
--if(isset($_POST['id_com']))
   {
	echo $opt->ShowComune();
	die;
   }
--
nel select.class:
PHP:
public function ShowComune()
		{
			$sql = "SELECT * FROM comuni WHERE id_com=$_POST[id_com]";
			$res = mysql_query($sql,$this->conn);
			$comune = '';
			
				while($row = mysql_fetch_array($res))
				{
					$comune.= $row['id_com'] . $row['cap'] . ' - ' . utf8_encode($row['comune']);
				}
				
			return $comune;
		}
e quando faccio la selezione mi restituisce il seguente errore:

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\testcascata\select.class.php on line 70

qualcuno mi puo dare un suggerimento!!!

grazie in anticipo.
 
Ultima modifica di un moderatore:
stampa query ed errore in questo modo
PHP:
<?php

$sql = "SELECT * FROM comuni WHERE id_com=$_POST[id_com]";
$res = mysql_query($sql, $this->conn);
// se la query non va a buon fine
if (!$res) {
    // stampi query ed errore
    echo "Errore nella query <br/>" . $query . "<br/>" . mysql_error();
    // blocchi l'esecuzione dello script
   die();
}  
?>
dall'errore puoi capire dov'è il problema

edit
qui ci vanno gli apici singoli
PHP:
$_POST[id_com]
PHP:
$_POST['id_com']
 
Ultima modifica:
sto impazzendo!!!

1.se metto gli apici si incazza!!e non so perchè

2.come faccio a dargli la condizione di selezionare solo il record che è stato selezionato nel menu precedente? l'errore mi dice che c'è un errore nella query e d'accordo, ma se tolgo WHERE id ecc mi stampa tutti i comuni a prescindere dalla provincia (quindi non va bene), ho visto anche che tutte le condizioni che posso mettere sono relative ai campi nella tabella ma io non ho nessun campo che mi dice che il comune è selezionato.
sono sfinito....come dico ad una funzione di stampare una serie di dati che fanno riferimento alla selezione nel menu sopra che non mi restituisce nessun risultato.
 
l'errore mi dice che c'è un errore nella query
postalo
di solito mysql è molto preciso sugli errori

ma la select dei comuni sei riuscito a popolarla?
 
Ultima modifica:
trovato l'errore
nella chiamata jquery scrivi comuni
PHP:
$.post("select.php", {id_com:comuni}, function(data){
invece che comune
PHP:
$.post("select.php", {id_com:comune}, function(data){

se non riesci a risolvere te lo posto funzionante
 
buongiorno!!!
ho provato a mettere comuni ma mi da sempre lo stesso errore:

Notice: Undefined variable: query in C:\xampp\htdocs\testcascata\select.class.php on line 71
Errore nella query

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[object HTMLSelectElement]' at line 1

ti posto il codice dei file:
1. select.class:l'ultima funzione dovrebbe tirarmi fuori il comune ma lì viene l'errore
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 id_reg=$_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 id_pro=$_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;
		}
		public function ShowComune(){		

		$sql = "SELECT * FROM comuni WHERE id_com=$_POST[id_com]";
		$res = mysql_query($sql, $this->conn);
		// se la query non va a buon fine
		if (!$res) {
		// stampi query ed errore
		echo "Errore nella query <br/>" . $query . "<br/>" . mysql_error();
		// blocchi l'esecuzione dello script
		die();
			}
		}  		
}
?>
2. index.php
PHP:
<script type="text/javascript" src="jquery-1.3.2.js"></script>

	<link href="screen.css" rel="stylesheet" type="text/css" />
	<title>Regioni, province, comuni | Your Inspiration Web</title>
	
	<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#comune").html;
		
		
		
		
		$("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);	
			});
		});	
		$("select#comuni").change(function(){
			
			$("table#comune").html(attendere);
			var comune = $("select#comuni option:selected").attr('value');
			$.post("select.php", {id_com:comuni}, function(data){
				
				$("table#comune").html(data);	
			});
		});
		
	});
	
	</script>
</head>
<?php
include_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="select_form">
			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>
			<br />
			<br />
			<br />
			
		</form>
		<table id="comune"></table>
	</div>
3.select.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;
}

if(isset($_POST['id_com']))
{
	echo $opt->ShowComune();
	die;
}
grazie infinitamente per l'aiuto....
 
Ultima modifica di un moderatore:
no, non hai cambiato
Codice:
$("select#comuni").change(function(){
            
            $("table#comune").html(attendere);
            var comune = $("select#comuni option:selected").attr('value');
            $.post("select.php", {id_com:comuni}, function(data){
                
                $("table#comune").html(data);    
            });
        });
cosi
Codice:
$("select#comuni").change(function(){
            
            $("table#comune").html(attendere);
            var comune = $("select#comuni option:selected").attr('value');
            $.post("select.php", {id_com:comune}, function(data){    // [B]questa riga [/B]
                
                $("table#comune").html(data);    
            });
        });
 

Discussioni simili