Select e Checkbox in cascata.

holyjoe

Nuovo Utente
7 Apr 2014
15
0
0
Salve.
sono nuovo di questo forum e appena agli inizi con il php e jquery.
Vorrei chiedervi un consiglio.
Sto cercando di fare una select in cascata con una checkbox.
Mi spiego meglio. Selezionando una commessa (select) vorrei visualizzare tutte le attività relative alla commessa selezionata (checkbox).

Ho preso spunto dal codice "Regioni - Provincie - Comuni"

Vi posto il codice:

_select.php
PHP:
<?php

include_once '_select.class.php';
$opt = new SelectList();

if(isset($_POST['id']))
{
	echo $opt->MostraAttivita();
	
	die;
}



?>


_select.class.php
PHP:
<?php

class SelectList
{
	
		public function MostraCommesse()
		{
			$sql = "SELECT * FROM commesse";
			$res = mysql_query($sql);
			$commessa = '<option value="0">scegli la commessa</option>';
			
				while($row = mysql_fetch_array($res))
				{
					$commessa .= '<option value="' .$row['id'] . '">' .$row['nome'] .'</option>';
				}
				
			return $commessa;
		}
		
		public function MostraAttivita()
		{
			$sql = "SELECT * FROM attivita WHERE idcommessa=$_POST[id]";
			$res = mysql_query($sql);
			$attivita = '<option value="0">scegli...</option>';
			
				while($row = mysql_fetch_array($res))
				{
					$attivita .= '<option value="' . $row['id'] . '">' . utf8_encode($row['nome']) . '</option>';
					
				}
				
			return $attivita;
		}

}	

?>

_index.php
PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

<head>
	<meta http-equiv="content-type" content="text/html charset=utf-8">
	

	<script type="text/javascript" src="jquery-1.4.1.js"></script>

	
	<title>prova commesse -> attivitÃ*</title>
	
	<script type="text/javascript">
	$(document).ready(function(){

		var scegli = '<option value="0">Scegli...</option>';
		var attendere = '<option value="0">Attendere...</option>';
		
		$("select#attivita").html(scegli);
		$("select#attivita").attr("disabled", "disabled");
		
		
		
		$("select#commessa").change(function(){
			$("select#attivita").html(attendere);
			var commessa = $("select#commessa option:selected").attr('value');
			
			$("select#attivita").attr("disabled", "disabled");
			
			
			$.post("_select.php", {id:commessa}, function(data){
				$("select#attivita").removeAttr("disabled"); 
				$("select#attivita").html(data);	
			});
		});	
		
		
		$("select#attivita").change(function(){
            
            $("select#attivita").html(attendere);
            var attivita = $("select#attivita option:selected").attr('value');
            $.post("_select.php", {id:attivita}, function(data){
                
                $("select#attivita").html(data);    
            });
		});
	
		
	});
	
	</script>
</head>





<?php


$conn = mysql_connect("localhost","username","password");  
$db = mysql_select_db("database1"); 

// Check connection
if (mysql_error())
	{
   	 echo "<font color='red'>Connessione al database fallita: </font>" .mysql_error(). "<br>";
	 exit();
  	}
else
	{
	echo "<font color='green'>Connesso al database. </font><br><br>";
	} 






include_once '_select.class.php';
$opt = new SelectList();
?>
<body>
	<div id="container">
	
	<h1>commesse - attivitÃ*</h1>
	<h2>prova</h2>
	
	
		<form action="?" id="myform">
			Seleziona la commessa:<br />
			<select id="commessa">
				<?php echo $opt->MostraCommesse(); ?>
			</select>
			<br /><br />
		
			Seleziona attività*:<br />
			<checkbox id="attivita">
			
			<input name="Checkbox1" type="checkbox" />
			</select>
			<br /><br />
		
			
			
		</div>
	</form>


</body>
</html>


Dove sbaglio? :(
Sono settimane che ci sbatto la testa ma non riesco a risolvere la cosa.
Aiutatemi per piacere!!!
 

f107

Utente Attivo
7 Ago 2012
206
6
18
Roma
Ciao...

PHP:
 $("select#commessa").change(function(){
            $("select#attivita").html(attendere);
            var commessa = $("select#commessa option:selected").attr('value');
            
            $("select#attivita").attr("disabled", "disabled");
            
            
            $.post("_select.php", {id:commessa}, function(data){
                $("select#attivita").removeAttr("disabled"); 
                $("select#attivita").html(data);    
            });
        });

Qui sostituisci cosi
PHP:
$("select#commessa").change(function(){
            $("select#attivita").html(attendere);
            var commessa = $("select#commessa").val();
            
            $("select#attivita").attr("disabled", "true");
            
            
            $.post("_select.php", {id:commessa}, function(data){
                $("select#attivita").removeAttr("disabled"); 
                $("select#attivita").html(data);    
            });
        });


Questo
PHP:
<?php

include_once '_select.class.php';
$opt = new SelectList();

if(isset($_POST['id']))
{
    echo $opt->MostraAttivita();
    
    die;
}



?>

Lo cambi cosi:
PHP:
<?php

include_once '_select.class.php';
$opt = new SelectList();

if(isset($_POST['id']))
{
    echo $opt->MostraAttivita($_POST['id']);
    
    die;
}



?>

e questo:
PHP:
public function MostraAttivita()
        {
            $sql = "SELECT * FROM attivita WHERE idcommessa=$_POST[id]";
            $res = mysql_query($sql);
            $attivita = '<option value="0">scegli...</option>';
            
                while($row = mysql_fetch_array($res))
                {
                    $attivita .= '<option value="' . $row['id'] . '">' . utf8_encode($row['nome']) . '</option>';
                    
                }
                
            return $attivita;
        }

diventa
PHP:
public function MostraAttivita($iId)
        {
            $sql = "SELECT * FROM attivita WHERE idcommessa=".intval($iId);
            $res = mysql_query($sql);
            $attivita = '<option value="0">scegli...</option>';
            
                while($row = mysql_fetch_array($res))
                {
                    $attivita .= '<option value="' . $row['id'] . '">' . utf8_encode($row['nome']) . '</option>';
                    
                }
                
            return $attivita;
        }
Attento alle SQL injection!
Inoltre ti consiglio di utilizzare PDO / mysqli in quanto mysql verrà deprecato.

è un po' tutto impicciato, comunque che browser utilizzi? quando cambi la prima select controlla la console degli errori e vedi che succede.

Fammi sapere.
 

holyjoe

Nuovo Utente
7 Apr 2014
15
0
0
Ciao f107.
Grazie per la risposta.
Ho effettuato i cambiamenti da te consigliati ma non ottengo nulla.
Utilizzo chrome. Se premo F12 e vado i console, non mi segnala nessun errore alla selezione della commessa.
Riesco a visualizzare e a selezionare le commesse, ma non riesco a visualizzare le attività relative alla commessa selezionata.
 

f107

Utente Attivo
7 Ago 2012
206
6
18
Roma
Ciao f107.
Grazie per la risposta.
Ho effettuato i cambiamenti da te consigliati ma non ottengo nulla.
Utilizzo chrome. Se premo F12 e vado i console, non mi segnala nessun errore alla selezione della commessa.
Riesco a visualizzare e a selezionare le commesse, ma non riesco a visualizzare le attività relative alla commessa selezionata.

è possibile vedere la pagina online? cosi possiamo vedere anche noi il processo in funzione?
Grazie
 

holyjoe

Nuovo Utente
7 Apr 2014
15
0
0
Purtroppo non lo posso mettere online.
Ti invio uno sceenshot.
2014-04-11_160938.png
 

f107

Utente Attivo
7 Ago 2012
206
6
18
Roma
Si scopri che era un errore nella query... :)
Sostituisci questo:
PHP:
public function MostraAttivita($iId) 
        { 
            $sql = "SELECT * FROM attivita WHERE idcommessa=".intval($iId); 
            $res = mysql_query($sql); 
            $attivita = '<option value="0">scegli...</option>'; 
             
                while($row = mysql_fetch_array($res)) 
                { 
                    $attivita .= '<option value="' . $row['id'] . '">' . utf8_encode($row['nome']) . '</option>'; 
                     
                } 
                 
            return $attivita; 
        }
Con:
PHP:
public function MostraAttivita($iId) 
        { 
            $sql = "SELECT * FROM attivita WHERE idcommessa=".intval($iId); 
            $res = mysql_query($sql) or die($sql.' '.mysql_error()); 
            $attivita = '<option value="0">scegli...</option>'; 
             
                while($row = mysql_fetch_array($res)) 
                { 
                    $attivita .= '<option value="' . $row['id'] . '">' . utf8_encode($row['nome']) . '</option>'; 
                     
                } 
                 
            return $attivita; 
        }


e per ora questo:
PHP:
include_once '_select.class.php'; 
$opt = new SelectList(); 

if(isset($_POST['id'])) 
{ 
    echo $opt->MostraAttivita($_POST['id']); 
     
    die; 
}

diventa
PHP:
include_once '_select.class.php'; 
$opt = new SelectList(); 

if(isset($_REQUEST['id'])) 
{ 
    echo $opt->MostraAttivita($_REQUEST['id']); 
     
    die; 
} else die('NON ARRIVA');

e vai su http://SITO/_select.php?id=ID_COMMESSA

Fammi sapere!!
Ciao
 

holyjoe

Nuovo Utente
7 Apr 2014
15
0
0
NON ARRIVA

SELECT * FROM attivita WHERE idcommessa=0 Access denied for user 'ODBC'@'localhost' (using password: NO)
 

f107

Utente Attivo
7 Ago 2012
206
6
18
Roma
NON ARRIVA

SELECT * FROM attivita WHERE idcommessa=0 Access denied for user 'ODBC'@'localhost' (using password: NO)

te li da entrambi? :O
Mi pare molto strano che url hai inserito per curiosità? comunque pare che tu abbia dei problemi con l'autenticazione con mysql, i dati sono corretti?
 

holyjoe

Nuovo Utente
7 Apr 2014
15
0
0
inserendo nella barra di chrome _select.php?id=ID_COMMESSA ottengo:
SELECT * FROM attivita WHERE idcommessa=0 Access denied for user 'ODBC'@'localhost' (using password: NO)

mentre inserendo _select.php ottengo:
NON ARRIVA

Se è come dici, che ci siano problemi con l'autenticazione al Database Mysql, mi sembra molto strano.
Le due tabelle si trovano sullo stesso database. E riesco ad accedere tranquillamente alla tabella "Commesse".
....mah!!!
 

f107

Utente Attivo
7 Ago 2012
206
6
18
Roma
inserendo nella barra di chrome _select.php?id=ID_COMMESSA ottengo:
SELECT * FROM attivita WHERE idcommessa=0 Access denied for user 'ODBC'@'localhost' (using password: NO)

mentre inserendo _select.php ottengo:
NON ARRIVA

Se è come dici, che ci siano problemi con l'autenticazione al Database Mysql, mi sembra molto strano.
Le due tabelle si trovano sullo stesso database. E riesco ad accedere tranquillamente alla tabella "Commesse".
....mah!!!

si se non metti l'id ti stampa non arriva.
Comunque c'è qualche problema... cerca su google "Access denied for user (using password: NO)" e vedi che è un errore di mysql di autenticazione.
Ti consiglio di ricontrollare.
Usi phpmyadmin o altro? se fai l'accesso con lo stesso utente del codice te lo fa?

Fammi sapere
 

holyjoe

Nuovo Utente
7 Apr 2014
15
0
0
Uso phpMySQL.

se inserisco in _commessa.php il codice:
PHP:
$sql="SELECT * FROM attivita WHERE id='1'";
$result=mysql_query($sql);
while($row = mysql_fetch_array($result))
{
	echo $nomeaziendascheda = $row['nome'], "<br>";
	echo $idaziendascheda = $row['id'], "<br>";	
	
}

mi stampa l'attività con id=1
 

holyjoe

Nuovo Utente
7 Apr 2014
15
0
0
il campo id è un int (auto incrementale), mentre idcommessa è un varchar(255).
Io faccio "perno" sul campo idcommessa per ricavarmi l'attività relativa.
Forse deve essere un int e non un varchar?
 

f107

Utente Attivo
7 Ago 2012
206
6
18
Roma
se è solo numerico sarebbe cosa buona e giusta metterlo come int.
Comunque se non vuoi sostituisci questo:
PHP:
public function MostraAttivita($iId)  
        {  
            $sql = "SELECT * FROM attivita WHERE idcommessa=".intval($iId);  
            $res = mysql_query($sql) or die($sql.' '.mysql_error());  
            $attivita = '<option value="0">scegli...</option>';  
              
                while($row = mysql_fetch_array($res))  
                {  
                    $attivita .= '<option value="' . $row['id'] . '">' . utf8_encode($row['nome']) . '</option>';  
                      
                }  
                  
            return $attivita;  
        }

con
PHP:
public function MostraAttivita($iId)  
        {  
            $sql = "SELECT * FROM attivita WHERE idcommessa= '".intval($iId)."'";  
            $res = mysql_query($sql) or die($sql.' '.mysql_error());  
            $attivita = '<option value="0">scegli...</option>';  
              
                while($row = mysql_fetch_array($res))  
                {  
                    $attivita .= '<option value="' . $row['id'] . '">' . utf8_encode($row['nome']) . '</option>';  
                      
                }  
                  
            return $attivita;  
        }

fammi sapere
 

holyjoe

Nuovo Utente
7 Apr 2014
15
0
0
ho provato sia a cambiare il tipo del campo dell'idcommessa in int sia a cambiare il codice come mi hai suggerito mettendo il tipo di campo di idcommessa come varchar ma non funziona.
 

f107

Utente Attivo
7 Ago 2012
206
6
18
Roma
ho provato sia a cambiare il tipo del campo dell'idcommessa in int sia a cambiare il codice come mi hai suggerito mettendo il tipo di campo di idcommessa come varchar ma non funziona.

Se da phpmyadmin esegui questa query?
SELECT * FROM attivita WHERE idcommessa= '1'

che ti dice?
 

holyjoe

Nuovo Utente
7 Apr 2014
15
0
0
e se vai su _select.php?id=1 ti da sempre errore?
:(
SELECT * FROM attivita WHERE idcommessa=1 Access denied for user 'ODBC'@'localhost' (using password: NO)

ho inserito in _commessa.php il seguente codice:
PHP:
$sql="SELECT * FROM attivita WHERE idcommessa='1'";
$result=mysql_query($sql);
while($row = mysql_fetch_array($result))
{
	echo "nome attivià = ", $nomeattivita = $row['nome'], "<br>";
	echo "id attività = ", $idattivita = $row['id'], "<br>";


ti invio uno screenshot di _commessa.php:
2014-04-14_123941.png
 

f107

Utente Attivo
7 Ago 2012
206
6
18
Roma
:(
SELECT * FROM attivita WHERE idcommessa=1 Access denied for user 'ODBC'@'localhost' (using password: NO)

ho inserito in _commessa.php il seguente codice:
PHP:
$sql="SELECT * FROM attivita WHERE idcommessa='1'";
$result=mysql_query($sql);
while($row = mysql_fetch_array($result))
{
	echo "nome attivià = ", $nomeattivita = $row['nome'], "<br>";
	echo "id attività = ", $idattivita = $row['id'], "<br>";


ti invio uno screenshot di _commessa.php:
Vedi l'allegato 2177

ho un brutto dubbio...
Inserisci queste righe su _select.php all'inizio
PHP:
$conn = mysql_connect("localhost","username","password");  
$db = mysql_select_db("database1");

logicamente metti i dati corretti.

fammi sapere
 
Discussioni simili
Autore Titolo Forum Risposte Data
O Modificare attributo float di un immagine tramite checkbox o select Javascript 3
K checkbox - select all Javascript 3
L Ripetere Campi disabilitando input in riferimento ad un valore della select jQuery 0
otto9due Ordinare option di una select Javascript 5
W MySQL ciclo in SELECT MySQL 0
W MySQL SELECT list dinamica MySQL 0
M Select Option dentro una Table jQuery 2
G Colorare menu select attraverso ricerca php PHP 0
L problema con query select PHP 2
F menù select dinamico da db in php PHP 3
D popolare campi tra th alla select PHP 36
M Estrarre valore con SELECT COUNT PHP 0
M Creare un campo input select quantità di un numero intero prelevato dal db PHP 3
L Select Dinamiche...da txt? PHP 3
E Php select option e ajax PHP 23
R Select concatenata che non funziona la seconda volta Ajax 3
L select join e sottrazione punti PHP 13
L input dati con inser into select ? PHP 4
V hierarchy-select jQuery 0
Emix Select concatenate php sql ajax PHP 2
F query e form con select multipla PHP 17
T recupero valori select multipla da android Javascript 3
J php, scegliere autista da select e mostrare se ha fatto un incidente PHP 8
Tommy03 Select in ordine per numero di record MySQL 7
T problema con select dinamica con jquery Javascript 0
J Far comparire e scomparire un div con un select Javascript 1
M Opzioni select da 1 a 200 PHP 0
I Fatal error: Query Failed! SQL: SELECT * INTO OUTFILE PHP 1
C input in sostituzione della select PHP 2
G Insert into select - Aiuto MySQL 0
max1974 autocomplete trigger select jQuery 0
X [Select] Valori chiave non presenti in un'altra tabella MySQL 2
M Estrarre dati da una select HTML PHP 3
MarcoGrazia jquery validate, necessità di validare almeno un elemento select su due jQuery 1
T [PHP] Autocompilazione input multiple da una select PHP 1
Alex_70 [PHP] Visualizzare foto tramite select PHP 0
S [PHP] aggiornamento table tramite select senza ricaricare la pagina PHP 5
psicomia Gestione funzione in javascript in tabella richiamare"textarea" valori preimpostati in "select" Javascript 2
M [PHP] Problema con query select PHP 2
C [PHP] Controllo <select> comportamento anomalo PHP 2
G [PHP] Select con opzioni dipendenti da un'altra select PHP 3
L [Javascript] Select option in campi input Javascript 4
M [PHP] Problemi con select PHP 6
S [RISOLTO] aggiorna tabella da select option asp classic Classic ASP 7
S [ASP] SALVARE VALORE SELECT OPTION SU CAMPO TABELLA ACCESS Classic ASP 9
max1974 [Javascript] malfunzionamento select Javascript 0
M [PHP] Drop down in campo select PHP 1
D [PHP] Select dinamici PHP 2
G sql select con array in php PHP 1
L [PHP] Form da select compilare campi automaticamente PHP 1

Discussioni simili