Sessione nella check

minatore

Utente Attivo
25 Set 2007
410
0
0
Ciao a tutti, la domanda è semplice, non ne sono sicuro della risposta.
Ho un form dove ci sono dei campi tra cui anche delle check, quando c'è un errore dell'utente, lo mando in un'altra pagina, con un link torna indietro, è possibile lasciargli le scelte fatte delle check, in modo che lui non debba rimetterle di nuovo
Grazie
 
ciao
è possibile, come da tuo titolo puoi usare le sessioni
se il check è ceccato (lo vedi dal suo $_POST) inizializzi la sessione es:

PHP:
if(isset($_POST['check')){$_SESSION['check']="pinco";}
poi nel form
PHP:
<?php
$ch="";
if($_SESSION['check']=="pinco"){$ch="checked";}
?>
<input type="checkbox" name="checkbox" <?php echo $ch; ?> value="checkbox">
se il check era ceccato il check nel form rimane ceccato
 

Come al solito avete capito il mio problema, l'esempio è ottimo, ma a dirvi la verità non so modificarlo per il mio script, quindi è meglio se vi posto il mio codice.
pagina prova.php
PHP:
<?php session_start();?>
<?php
require '../connessione/Config.php';
require '../connessione/Connect.php';

echo"<form method='post' action='script/add_articolo.php'>";
if(isset($_SESSION['cognome']))
{$_SESSION['cognome']=$_SESSION['cognome'];}
else
{$_SESSION['cognome']='1';}

if(isset($_SESSION['nome']))
{$_SESSION['nome']=$_SESSION['nome'];}
else
{$_SESSION['nome']='';}

if(isset($_SESSION['indirizzo']))
{$_SESSION['indirizzo']=$_SESSION['indirizzo'];}
else
{$_SESSION['indirizzo']='';}


echo"
<table cellpadding='0' cellspacing='0' border='0' bordercolor='#F59F0B'>
	<tr>
		<td width='10'></td>
		<td align='left' valign='top' height='15' class='font_2'>Marca</td>
		<td width='10'></td>
		<td align='left' valign='top' height='15' class='font_2'>Modello</td>
	</tr>
	<tr>
		<td width='10' height='30'></td>
		<td align='left' valign='top'>";
		
		$query_marche=mysql_query("Select * From marche where id_marca='$_SESSION[cognome]'")
		or die("errore nella query_marche;".mysql_error());
		$estr_marca=mysql_fetch_assoc($query_marche);
		echo"<select name='marca' class='select_1'>";
			echo"
				<option value='".$_SESSION['cognome']."'>
			   ".$estr_marca['descrizione_marca']."
				</option>";
		
		$query_marche=mysql_query("Select * From marche")
		or die("errore nella query_marche;".mysql_error());
				
		for($a=0; $a<mysql_num_rows($query_marche);$a++)
			{
				$a_elenco_marche=mysql_fetch_assoc($query_marche);
					echo"
						<option value='".intval($a_elenco_marche['id_marca'])."'>
						".$a_elenco_marche['descrizione_marca']."
						</option>";
			}
		echo"</select>";
		
		echo"
		</td>
		<td width='10'></td>";
		echo"
			<td align='left' valign='top'>
				<input type='text' name='modello' class='input_text_1' value='".$_SESSION['nome']."' />
			</td>";
		echo"
		<td width='10'></td>
	</tr>
</table>
<table cellpadding='0' cellspacing='0' border='0' bordercolor='#F59F0B'>
	<tr>
		<td width='10'></td>
		<td align='left' valign='top' height='15' class='font_2'>Accessori</td>
	</tr>
	<tr>
		<td width='10'></td>
		<td align='left' valign='top' height='15'>";
			$a_optional=array('Abs', 'Esp', 'Airbag guidatore', 'Airbag passeggero', 'Airbag laterale', 'Fendinebbia',
			'Chiusure centralizzate', 'Servosterzo', 'Alzacristalli elettrici', 'Autoradio',
			'Lettore cd', 'Comandi al volante', 'Computer di bordo', 'City', 'Antifurto acustico',
			'Antifurto satellitare', 'Blockshaft', 'Clima digitale', 'Clima analogico', 'Cerchi in lega',
			'Immobilizzatore elettronico', 'Navigatore', 'Tetto panoramico', 'Tetto apribile',
			'Specchi laterali elettrici', 'Cruise control', 'Regolazione elettronica sedili',
			'Interni in pelle', 'Interni in alcantara',	'Sedili riscaldabili', 'Barre tetto',
			'Trazione integrale', 'Controllo trazione', 'Sensori luci',
			'Sensori pioggia', 'Sensori parcheggio anteriori', 'Sensori parcheggio posteriori',
			'Cambio manuale', 'Cambio automatico', 'Fari xenon', 'Caricatore cd', 'Bluetooth', 'Attacco usb',
			'Gancio traino', 'Adatto handicap');
			
			$lungh_array= count($a_optional);
			$riga=1;
			echo"<table cellpadding='0' cellspacing='0' border='0' bordercolor='#23D527'>";
				for($n=0; $n<$lungh_array; $n++)
					{
						if($riga == 1)
							{
								echo"<tr>";	
							}
								echo"
									<td width='200' class='font_8'>
										<input type='checkbox' name='$n' value='".$_SESSION['indirizzo']."' 
										checked='".$_SESSION['indirizzo']."'>$a_optional[$n]
									</td>";
									$riga++;
						if($riga > 3)
							{
								echo"</tr>";
								$riga=1;	
							}
					}
				echo"</table>
		</td>
	</tr>
</table>";
echo"
<table cellpadding='0' cellspacing='0' border='0' bordercolor='#F59F0B'>
	<tr>
		<td width='10'></td>
		<td align='left' valign='top' height='15'></td>
	</tr>
	<tr>
		<td width='10'></td>
		<td align='left' valign='top'>
			<input type='image' value='salva_an' img src='../images/salva.png' border='0' />
		</td>
	</tr>
</table>
</form>";
?>
</body>
pagina che riceve i dati add_articolo.php
PHP:
<?php
	session_start();

	$_SESSION['cognome']=$_POST['marca'];
	$_SESSION['nome']=$_POST['modello'];
	
	$a_nome_optional=array('Abs', 'Esp', 'Airbag guidatore', 'Airbag passeggero', 'Airbag laterale', 'Fendinebbia',
	'Chiusure centralizzate', 'Servosterzo', 'Alzacristalli elettrici', 'Autoradio',
	'Lettore cd', 'Comandi al volante', 'Computer di bordo', 'City', 'Antifurto acustico',
	'Antifurto satellitare', 'Blockshaft', 'Clima digitale', 'Clima analogico', 'Cerchi in lega',
	'Immobiliz elettronico', 'Navigatore', 'Tetto panoramico', 'Tetto apribile', 'Specchi later elettr',
	'Cruise control', 'Regolaz elettron sedili', 'Interni in pelle', 'Interni in alcantara',
	'Sedili riscaldabili', 'Barre tetto', 'Trazione integrale', 'Controllo trazione', 'Sensori luci',
	'Sensori pioggia', 'Sensori parcheg ant', 'Sensori parcheg post',
	'Cambio manuale', 'Cambio automatico', 'Fari xenon', 'Caricatore cd', 'Bluetooth', 'Attacco usb',
	'Gancio traino', 'Adatto handicap');
		
	$num_optional=count($a_nome_optional);
	for($cont=0; $cont<$num_optional; $cont++)
		{					
			if(isset($_POST[$cont]))
				{
					$a_accessori[]=$a_nome_optional[$cont];
				}					
		}
	if(!isset($a_accessori))
		{
			$accessori = '';
		}
	else
		{
			$accessori = implode(',', $a_accessori);
		}
	$_SESSION['indirizzo']=$accessori;
	header('location:' . '../prova.php');
?>
io ho fatto così ma me li da tutte chekkate, lo so non va bene, ma di più non so
vorrei tanto capire
Grazie
 
ciao
prova così, al massimo non funzia
PHP:
<?php
 //da mettere nella parte di lettura dei check
 //.....
 $num_optional=count($a_nome_optional);
    for($cont=0; $cont<$num_optional; $cont++)
        {                    
            if(isset($_POST[$cont]))
                {
                    $a_accessori[]=$a_nome_optional[$cont];
					$_SESSION[$cont]=$cont;//il valore della sessione è ininfluente, si verifica nel form solo se esiste o meno
                }else{
					if(isset($_SESSION[$cont])){unset($_SESSION[$cont]);}
				}                    
        }
    if(!isset($a_accessori))
//......
?>

PHP:
<?php
//..............
//da mettere nella partedel form
 $ch=""; if(isset($_SESSION[$n])){$ch="checked";}
 echo"
<td width='200' class='font_8'>
<input type='checkbox' name='$n' value='".$_SESSION['indirizzo']." $ch >$a_optional[$n]</td>";
$riga++; 
//..................
?>
poi un piccolo consiglio
la parte in cui scrivi
$a_nome_optional=array('Abs', ecc....
sarebbe meglio che tu la mettessi in un file e la richiamassi con (es.)
require_once("optional.php");
questo perche se devi modificare/aggiungere/eliminare da una parte, correggi da entrambe. poi ricordati che gli script ripetuti ugauali su più pagine sono indice di script non ragionati
 
Ciao e grazie, ma non va, per semplificare il tutto sto lavorando solo sulle check
PHP:
<?php session_start();?>
<?php
require '../connessione/Config.php';
require '../connessione/Connect.php';

echo"<form method='post' action='script/add_articolo.php'>";

if(isset($_SESSION['indirizzo']))
{$_SESSION['indirizzo']=$_SESSION['indirizzo'];}
else
{$_SESSION['indirizzo']='';}
echo"
<table cellpadding='0' cellspacing='0' border='0' bordercolor='#F59F0B'>
	<tr>
		<td width='10'></td>
		<td align='left' valign='top' height='15' class='font_2'>Accessori</td>
	</tr>
	<tr>
		<td width='10'></td>
		<td align='left' valign='top' height='15'>";
			$a_optional=array('Abs', 'Esp', 'Airbag guidatore', 'Airbag passeggero', 'Airbag laterale', 'Fendinebbia',
			'Chiusure centralizzate', 'Servosterzo', 'Alzacristalli elettrici', 'Autoradio',
			'Lettore cd', 'Comandi al volante', 'Computer di bordo', 'City', 'Antifurto acustico',
			'Antifurto satellitare', 'Blockshaft', 'Clima digitale', 'Clima analogico', 'Cerchi in lega',
			'Immobilizzatore elettronico', 'Navigatore', 'Tetto panoramico', 'Tetto apribile',
			'Specchi laterali elettrici', 'Cruise control', 'Regolazione elettronica sedili',
			'Interni in pelle', 'Interni in alcantara',	'Sedili riscaldabili', 'Barre tetto',
			'Trazione integrale', 'Controllo trazione', 'Sensori luci',
			'Sensori pioggia', 'Sensori parcheggio anteriori', 'Sensori parcheggio posteriori',
			'Cambio manuale', 'Cambio automatico', 'Fari xenon', 'Caricatore cd', 'Bluetooth', 'Attacco usb',
			'Gancio traino', 'Adatto handicap');
			
			$lungh_array= count($a_optional);
			$riga=1;
			echo"<table cellpadding='0' cellspacing='0' border='0' bordercolor='#23D527'>";
				for($n=0; $n<$lungh_array; $n++)
					{
						if($riga == 1)
							{
								echo"<tr>";	
							}
								$ch=""; if(isset($_SESSION[$n])){$ch="checked";}
								 echo"
								<td width='200' class='font_8'>
								<input type='checkbox' name='$n' value='".$_SESSION['indirizzo']." $ch >$a_optional[$n]</td>";
								$riga++; 

						if($riga > 3)
							{
								echo"</tr>";
								$riga=1;	
							}
					}
				echo"</table>
		</td>
	</tr>
</table>";
echo"
<table cellpadding='0' cellspacing='0' border='0' bordercolor='#F59F0B'>
	<tr>
		<td width='10'></td>
		<td align='left' valign='top' height='15'></td>
	</tr>
	<tr>
		<td width='10'></td>
		<td align='left' valign='top'>
			<input type='image' value='salva_an' img src='../images/salva.png' border='0' />
		</td>
	</tr>
</table>
</form>";
?>
</body>
mentre quella che riceve
PHP:
<?php
	session_start();

	$_SESSION['cognome']=$_POST['marca'];
	$_SESSION['nome']=$_POST['modello'];
	
	$a_nome_optional=array('Abs', 'Esp', 'Airbag guidatore', 'Airbag passeggero', 'Airbag laterale', 'Fendinebbia',
	'Chiusure centralizzate', 'Servosterzo', 'Alzacristalli elettrici', 'Autoradio',
	'Lettore cd', 'Comandi al volante', 'Computer di bordo', 'City', 'Antifurto acustico',
	'Antifurto satellitare', 'Blockshaft', 'Clima digitale', 'Clima analogico', 'Cerchi in lega',
	'Immobiliz elettronico', 'Navigatore', 'Tetto panoramico', 'Tetto apribile', 'Specchi later elettr',
	'Cruise control', 'Regolaz elettron sedili', 'Interni in pelle', 'Interni in alcantara',
	'Sedili riscaldabili', 'Barre tetto', 'Trazione integrale', 'Controllo trazione', 'Sensori luci',
	'Sensori pioggia', 'Sensori parcheg ant', 'Sensori parcheg post',
	'Cambio manuale', 'Cambio automatico', 'Fari xenon', 'Caricatore cd', 'Bluetooth', 'Attacco usb',
	'Gancio traino', 'Adatto handicap');
		
	$num_optional=count($a_nome_optional);
    for($cont=0; $cont<$num_optional; $cont++)
        {                    
            if(isset($_POST[$cont]))
                { 
                    $a_accessori[]=$a_nome_optional[$cont];
                    $_SESSION[$cont]=$cont;//il valore della sessione è ininfluente, si verifica nel form solo se esiste o meno
                }else{
                    if(isset($_SESSION[$cont])){unset($_SESSION[$cont]);}
                }                    
        }
    
	if(!isset($a_accessori))
		{
			$accessori = '';
		}
	else
		{
			$accessori = implode(',', $a_accessori);
		}
	$_SESSION['indirizzo']=$accessori;
	header('location:' . '../prova.php');
?>
Per il tuo consiglio, sugli accessori, in verità un piccolo pensieriino lo avevo fatto, ma adesso lo faccio di sicuro, però devo risolvere prima questo, la input text e la select non è stato molto difficile, ma la check mi sta facendo sudare
Grazie
 
Ciao borgo, il fatto è che io devo capire, ho cambiato il tuo codice
PHP:
$lungh_array= count($a_optional);
			$riga=1;
			echo"<table cellpadding='0' cellspacing='0' border='0' bordercolor='#23D527'>";
				for($n=0; $n<$lungh_array; $n++)
					{
						if($riga == 1)
							{
								echo"<tr>";	
							}
								 if(isset($_SESSION['$n'])){$_SESSION['indirizzo']="checked";}
								 echo"
								<td width='200' class='font_8'>
								<input type='checkbox' name='$n' value='".$_SESSION['indirizzo']."' >$a_optional[$n]</td>";
								$riga++; 

						if($riga > 3)
							{
								echo"</tr>";
								$riga=1;	
							}
					}
				echo"</table>";
				echo"value='".$_SESSION['indirizzo']."'";
Quando mi ritorna la pagina, la check non è spuntata e va bè, il problema resta, ma
PHP:
echo"value='".$_SESSION['indirizzo']."'";
questo stampa i valori che dovrebbero essere chekkati
Ciao
 
ciao
prova a mettere un paio di var_dump
PHP:
<?php
//.....
 $_SESSION[$cont]=$cont;//il valore della sessione è ininfluente, si verifica nel form solo se esiste o meno 
var_dump($_SESSION[$cont]);
}else{ 
//...
?>
e
PHP:
<?php
//...
 } 
$ch=""; if(isset($_SESSION[$n])){$ch="checked";} 
var_dump($_SESSION[$n]);
var_dump($_SESSION[$ch]);
echo" 
<td width='200' class='font_8'> 
<input type='checkbox' name='$n' value='".$_SESSION['indirizzo']." $ch >$a_optional[$n]</td>"; 
$riga++;  
//.........
?>
poi sappimi dire cosa ti restituisce, facendo delle prove con ceccato e non
 
PHP:
echo"<table cellpadding='0' cellspacing='0' border='0' bordercolor='#23D527'>";
				for($n=0; $n<$lungh_array; $n++)
					{
						if($riga == 1)
							{
								echo"<tr>";	
							}
								
								$ch=""; if(isset($_SESSION[$n])){$ch="checked";}  
								var_dump($_SESSION[$n]); 
								var_dump($_SESSION[$ch]); 
								echo"  
								<td width='200' class='font_8'>  
								<input type='checkbox' name='$n' value='".$_SESSION['indirizzo']." $ch >$a_optional[$n]</td>";  
								$riga++; 

						if($riga > 3)
							{
								echo"</tr>";
								$riga=1;	
							}
					}
				echo"</table>";
pa pagina che riceve
PHP:
if(isset($_POST[$cont]))
                { 
                    $a_accessori[]=$a_nome_optional[$cont];
                    $_SESSION[$cont]=$cont;//il valore della sessione è ininfluente, si verifica nel form solo se esiste o meno  
					var_dump($_SESSION[$cont]); 
					}else{  
                    if(isset($_SESSION[$cont])){unset($_SESSION[$cont]);}
                }
Ho fatto come mi hai detto, mi da questo errore
checkkato e non
Codice:
Notice: Undefined offset: 0 in D:\html\annunci_italiani\annunci_pvt\prova.php on line 54
NULL 
Notice: Undefined index: in D:\html\annunci_italiani\annunci_pvt\prova.php on line 55
NULL
Comunque grazie per la collaborazione
Ciao
 
ciao
ho ridato un'occhiata a quello che avevo fatto tempo fa',
prova queste due paginette, funziano. in quello che ti avevo postato speravo di semplificare cioè non usare array di array, ma "chi lascia la via vecchia per la nuova, presto o tardi male si ritrova.

PHP:
<?php
if(!isset($_SESSION)){session_start();}
?>
<!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=iso-8859-1">
<title>pagina del form</title>
</head>
<body>
<?php
$opz=array('pinco','pallo','pallino','sempronio','asdrubale');
?>
<form name="form1" method="post" action="ceccatura01.php">
<?php
for($k=0;$k<count($opz);$k++){
  $chek="";
  if(is_array($_SESSION['ch']) && isset($_SESSION['ch'][$k])){$chek="checked";unset($_SESSION['ch'][$k]);}
  echo $opz[$k]."<input type=\"checkbox\" name=\"opzione[$k]\" value=\"".$opz[$k]."\" $chek><br>";
}
?>
<input name="invia" type="submit" id="invia" value="Invia">
</form>
</body>
</html>
PHP:
<?php
if(!isset($_SESSION)){session_start();}
?>
<!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=iso-8859-1">
<title>pagina che riceve</title>
</head>
<body>
<?php
$opz=array('pinco','pallo','pallino','sempronio','asdrubale');
if(isset($_POST['invia'])){
	if(is_array($_POST['opzione'])){//verifico almeno una ceccatura
		foreach($_POST['opzione'] as $chiave => $valore){//se si ciclo il post
			echo "selezionato: $valore<br>";
			if($chiave !==NULL){
				$_SESSION['ch'][$chiave]="ch";
			}
		}
	}else{
		echo "non selezionato<br>";
	}
	//simulo il ritorno per errori di compilazione form
	echo "<meta http-equiv='Refresh' content='3; URL=ceccatura.php'>";
}
?>
</body>
</html>
penso che tu riesca a modificarle/implementarle per il tuo script
 
Ciao borgo, grande funziona, adesso devo adattarlo al mio script, mo ci provo, se avessi problemi mi rifaccio vivo :fonzie:

Grazie
 

Olà borgo, ho studiato lo script e ne ho capito circa 80%
se gentilmente vorresti spiegarmi u passaggio
PHP:
if($chiave !==NULL){ 
$_SESSION['ch'][$chiave]="ch"; 
}
$chiave è il contatore 0,1,2... e ci siamo, ma come fai a scrivere
PHP:
_SESSION['ch']
quel ch dove lo prendi, non viene inizializzato da nessuna parte, è come se prendesse il posto di
PHP:
$_POST['opzione']
perchè poi nella pagina principale, non settiamo più opzione, ma ch
Grazie, che macello :incazz2:
 
ciao
PHP:
//...
if($chiave !==NULL){  
$_SESSION['ch'][$chiave]="ch";  
} 
//...
è una sicurezza per verificare cosa ho ceccato, meglio una in più che una in meno (almeno così la vedo io)

in $_SESSION['ch']

quel ch non è una variabile ma il nome della session, potresti metterci un altro nome qualsiasi (analogo quello che ci metto dentro es.

$_SESSION['pinco']="precipitevolissimevolmente";
in quanto dopo vado a verificare se la sessione esiste o meno (non quanto vale)



quindi le sessioni si chiameranno (in funzione della ceccatura) $_SESSION['ch'][0], $_SESSION['ch'][1] ecc...
se ti chiedi perche ho messo l'unset, pensa a cosa può fare l'utente (es)
1. scrive l'indirizzo email e seleziona le prime due voci
2. all'indirizzo manca la @, viene rimandato al form dove le prime due voci risultano ancora selezionate
3. riscrive l'indirizzo, ma pensa che la voce uno non gli vada bene quindi la deseleziona
4. ma si dimentica il .it quindi torna al form
se non avessi messo l'unset, tornando ancora al form, si troverebbe selezionate ancora le voci uno e due, mentre così trova sola la due
ho dato un nome alla sessione perche poi posso liberamente unsessarla, mentre se non gli avessi dato un nome correvo il rischio di unsessare anche qualche altra sessione

perchè poi nella pagina principale, non settiamo più opzione, ma ch
scusa, ma qui non capisco cosa intendi
 
Ciao, molto chiaro, per questa frase poi ho risolto
perchè poi nella pagina principale, non settiamo più opzione, ma ch

molto esaustivo come sempre
Ciao da minatore :book:
 

Discussioni simili