Select e Checkbox in cascata.

  • Creatore Discussione Creatore Discussione holyjoe
  • Data di inizio Data di inizio

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!!!
 
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.
 
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.
 
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
 
Purtroppo non lo posso mettere online.
Ti invio uno sceenshot.
2014-04-11_160938.png
 
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
 
NON ARRIVA

SELECT * FROM attivita WHERE idcommessa=0 Access denied for user 'ODBC'@'localhost' (using password: NO)
 
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?
 
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!!!
 
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
 
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
 
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?
 
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
 
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.
 
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?
 
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
 
:(
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