• Home
  • Forum
  • Fare Web
  • PHP

Select e Checkbox in cascata.

  • Creatore Discussione Creatore Discussione holyjoe
  • Data di inizio Data di inizio 7 Apr 2014
  • 1
  • 2
Succ.
1 di 2 Succ. Ultimo
H

holyjoe

Nuovo Utente
7 Apr 2014
15
0
0
  • 7 Apr 2014
  • #1
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
  • 8 Apr 2014
  • #2
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.
 
H

holyjoe

Nuovo Utente
7 Apr 2014
15
0
0
  • 11 Apr 2014
  • #3
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
  • 11 Apr 2014
  • #4
holyjoe ha scritto:
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.
Clicca per allargare...

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

holyjoe

Nuovo Utente
7 Apr 2014
15
0
0
  • 11 Apr 2014
  • #5
Purtroppo non lo posso mettere online.
Ti invio uno sceenshot.
 

f107

Utente Attivo
7 Ago 2012
206
6
18
Roma
  • 11 Apr 2014
  • #6
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
 
H

holyjoe

Nuovo Utente
7 Apr 2014
15
0
0
  • 11 Apr 2014
  • #7
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
  • 11 Apr 2014
  • #8
holyjoe ha scritto:
NON ARRIVA

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

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?
 
H

holyjoe

Nuovo Utente
7 Apr 2014
15
0
0
  • 11 Apr 2014
  • #9
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
  • 14 Apr 2014
  • #10
holyjoe ha scritto:
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!!!
Clicca per allargare...

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
 
H

holyjoe

Nuovo Utente
7 Apr 2014
15
0
0
  • 14 Apr 2014
  • #11
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
 

f107

Utente Attivo
7 Ago 2012
206
6
18
Roma
  • 14 Apr 2014
  • #12
ma il campo id nel db è un int? o un varchar? o altro?
 
H

holyjoe

Nuovo Utente
7 Apr 2014
15
0
0
  • 14 Apr 2014
  • #13
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
  • 14 Apr 2014
  • #14
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
 
H

holyjoe

Nuovo Utente
7 Apr 2014
15
0
0
  • 14 Apr 2014
  • #15
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
  • 14 Apr 2014
  • #16
holyjoe ha scritto:
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.
Clicca per allargare...

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

che ti dice?
 
H

holyjoe

Nuovo Utente
7 Apr 2014
15
0
0
  • 14 Apr 2014
  • #17
Mi mostra le attività della commessa 1.
 

f107

Utente Attivo
7 Ago 2012
206
6
18
Roma
  • 14 Apr 2014
  • #18
holyjoe ha scritto:
Mi mostra le attività della commessa 1.
Clicca per allargare...

e se vai su _select.php?id=1 ti da sempre errore?
 
H

holyjoe

Nuovo Utente
7 Apr 2014
15
0
0
  • 14 Apr 2014
  • #19
f107 ha scritto:
e se vai su _select.php?id=1 ti da sempre errore?
Clicca per allargare...
sì
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:
 

f107

Utente Attivo
7 Ago 2012
206
6
18
Roma
  • 14 Apr 2014
  • #20
holyjoe ha scritto:
sì
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
Clicca per allargare...

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
 
  • 1
  • 2
Succ.
1 di 2 Succ. Ultimo
Devi accedere o registrarti per poter rispondere.

Discussioni simili

O
Modificare attributo float di un immagine tramite checkbox o select
  • Oliver79
  • 7 Feb 2014
  • Javascript
Risposte
3
Visite
1K
Javascript 11 Feb 2014
LorenzoPi
L
K
checkbox - select all
  • Kessi
  • 21 Ott 2005
  • Javascript
Risposte
3
Visite
2K
Javascript 27 Ott 2005
daviduccio
L
Ripetere Campi disabilitando input in riferimento ad un valore della select
  • Lucas1
  • 4 Apr 2023
  • jQuery
Risposte
0
Visite
5K
jQuery 4 Apr 2023
Lucas1
L
Ordinare option di una select
  • otto9due
  • 20 Feb 2023
  • Javascript
Risposte
5
Visite
2K
Javascript 22 Feb 2023
otto9due
W
MySQL ciclo in SELECT
  • wolfland
  • 26 Mag 2022
  • MySQL
Risposte
0
Visite
2K
MySQL 26 Mag 2022
wolfland
W
W
MySQL SELECT list dinamica
  • wolfland
  • 2 Feb 2022
  • MySQL
Risposte
0
Visite
2K
MySQL 2 Feb 2022
wolfland
W
M
Select Option dentro una Table
  • mapa
  • 17 Dic 2021
  • jQuery
Risposte
2
Visite
3K
jQuery 19 Dic 2021
mapa
M
G
Colorare menu select attraverso ricerca php
  • Gabriele_04
  • 18 Ott 2021
  • PHP
Risposte
0
Visite
1K
PHP 18 Ott 2021
Gabriele_04
G
L
problema con query select
  • luigithen
  • 25 Mag 2021
  • PHP
Risposte
2
Visite
2K
PHP 26 Mag 2021
luigithen
L
F
menù select dinamico da db in php
  • fata1009
  • 15 Mag 2021
  • PHP
Risposte
3
Visite
2K
PHP 15 Mag 2021
zorro
D
popolare campi tra th alla select
  • dgianmarco
  • 5 Mag 2021
  • PHP
  • 2
Risposte
36
Visite
4K
PHP 3 Giu 2021
zorro
M
Estrarre valore con SELECT COUNT
  • miagy
  • 24 Mar 2021
  • PHP
Risposte
0
Visite
1K
PHP 24 Mar 2021
miagy
M
M
Creare un campo input select quantità di un numero intero prelevato dal db
  • maxnegri2036
  • 10 Mar 2021
  • PHP
Risposte
3
Visite
1K
PHP 11 Mar 2021
maxnegri2036
M
L
Select Dinamiche...da txt?
  • lucign0l0
  • 17 Feb 2021
  • PHP
Risposte
3
Visite
2K
PHP 18 Feb 2021
marino51
E
Php select option e ajax
  • Emanuele85
  • 17 Feb 2021
  • PHP
  • 2
Risposte
23
Visite
6K
PHP 11 Mar 2021
Emanuele85
E
R
Select concatenata che non funziona la seconda volta
  • _Rosy_
  • 29 Nov 2020
  • Ajax
Risposte
3
Visite
3K
Ajax 29 Nov 2020
WmbertSea
L
select join e sottrazione punti
  • luigithen
  • 1 Ott 2020
  • PHP
Risposte
13
Visite
2K
PHP 2 Ott 2020
luigithen
L
L
input dati con inser into select ?
  • luigithen
  • 24 Set 2020
  • PHP
Risposte
4
Visite
1K
PHP 25 Set 2020
luigithen
L
V
hierarchy-select
  • Vera
  • 21 Set 2020
  • jQuery
Risposte
0
Visite
2K
jQuery 21 Set 2020
Vera
V
Select concatenate php sql ajax
  • Emix
  • 3 Ago 2020
  • PHP
Risposte
2
Visite
2K
PHP 4 Ago 2020
Emix
Condividi:
Facebook X (Twitter) LinkedIn WhatsApp e-mail Condividi Link
  • Home
  • Forum
  • Fare Web
  • PHP
  • Italiano
  • Termini e condizioni d'uso del sito
  • Policy Privacy
  • Aiuto
  • Home
Community platform by XenForo® © 2010-2024 XenForo Ltd. | Traduzione a cura di XenForo Italia
Menu
Accedi

Registrati

  • Home
  • Forum
    • Nuovi Messaggi
    • Cerca...
  • Novità
    • Featured content
    • Nuovi Messaggi
    • Ultime Attività
X

Privacy & Transparency

We use cookies and similar technologies for the following purposes:

  • Personalized ads and content
  • Content measurement and audience insights

Do you accept cookies and these technologies?

X

Privacy & Transparency

We use cookies and similar technologies for the following purposes:

  • Personalized ads and content
  • Content measurement and audience insights

Do you accept cookies and these technologies?