form su più pagine e sessioni

alvall

Nuovo Utente
22 Giu 2013
6
0
0
Sto lavorando ad un form su più pagine, dove l'utente procede di pagina in pagina inserendo alcuni dati in ogni pagina.
Ecco un esempio di come è impostato:

PAGINA 1

HTML:
<form action="page2.php" method="POST">
input data_page1
</form>



PAGINA 2

PHP:
<?php
session_start();
session_register('data_page1');
$_SESSION['data_page1'] = $_POST['data_page1'];
?>

HTML:
<form action="page3.php" method="POST">
input data_page2
</form>



PAGINA 3

PHP:
<?php
session_start();
session_register('data_page2');
$_SESSION['data_page2'] = $_POST['data_page2'];
?>

Codice:
if (!$_SESSION['data_page2']){
echo "Go back to ".'<a href="page2.php">'."page 2".'</a>';
}
else{
<form action="page4.php" method="POST">
input data page3
</form>
}



Il form conta 6 pagine in totale. Tutto funziona bene se l'utente non fa errori di inserimento. I dati vengono raccolti una pagina dopo l'altra e infine inseriti nel database.

Tuttavia, c'è un problema se l'utente sbaglia a inserire i dati o lascia qualche campo vuoto. Se, ad esempio, arrivato a pagina 3 dimentica di inserire qualcosa, viene rediretto indietro a pagina 2. Il problema è che a quel punto i dati salvati da pagina 1 sono andati persi.
Sto sbagliando qualcosa con l'uso delle sessioni?
 
ciao
se non ho capito male, tornando per un errore dalla pag 3 alla 2 il dato in sessione proveniente dalla 1 si perde
il problema è che il $_POST['data_page1'] che metti in sessione alla pagina 2 passando alla 3 non esiste più
tornando indietro il $_POST['data_page1'] risulta NULL e quindi la sessione viene annullata
prova così

PHP:
<?php
//...
if(isset($_POST['data_page1'])){//se il $_POST esiste valorizzi la sessione
	$_SESSION['data_page1'] = $_POST['data_page1']; 
}
//...
?>
 
Ho provato ad utilizzare la tua idea inserendo nel form un campo VALUE, dove:

Codice:
value="<?php if(isset($_SESSION['data_page1'])){echo $_SESSION['data_page1'];}?>"

Tornando indietro da pagina_2 a pagina_1 funziona.
Non funziona nelle altre pagine, ad esempio da pagina_3 a pagina_2.
 
ciao
dai un occhio a quello che ho buttato giù, mi sembra che funzioni
mi sono limitato a due dati per pagina e 4 pagine (l'ultima solo per controllo e vedere i dati) quindi tieni presente che (come immagino) se sono molti di più penso che dovrai ricorrere agli array di array, o alle variabili di variabile
e vedere di raccoglie i controlli in funzioni altrimenti lo script diventa una bibbia.
comunque ho seguito questo principio
se passando da una pagina alla successiva si sono commessi errori non vine visualizzato il form e non si può proseguire ma solo tornare indietro
solo se si è fatto tutto giusto si mostra il form e si prosegue.
comunque dagli un occhio pensando che è molto perfettibile (e di molto)

pagina 1
PHP:
<?php
session_start();
?>
<html>
<head>
</head>
<body>
<?php
if(isset($_SESSION['dato_1'])){
	$dato_1=$_SESSION['dato_1'];
}else{
	$dato_1="";
}
if(isset($_SESSION['dato_2'])){
	$dato_2=$_SESSION['dato_2'];
}else{
	$dato_2="";
}
?>
PAGINA 1<br>
<form action="000002.php?pg=1" method="post">
dato 1   <input type="text" name="dato_1" value="<?php echo $dato_1; ?>"><br>
dato 2   <input type="text" name="dato_2" value="<?php echo $dato_2; ?>"><br>
<input type="submit" name="pag_1" value="Invia">
</form>
</body>
</html>
pagina 2
PHP:
<?php
session_start();
?>
<html>
<head>
</head>
<body>
<?php
/* controlli per i dati provenienti dalla pagina 1*/
if((isset($_POST['dato_1']) && trim($_POST['dato_1'])!="") && $_GET['pg']==1){
	//provengo dalla pagina 1 e tutti i dati inseriti
	$_SESSION['dato_1']=$_POST['dato_1'];
	$errore1="";
}else{
	if($_GET['pg']==3){
		//provengo dalla pagina 3 quindi sulla 1 non errori
		$errore1="";
	}else{
		//provengo dalla 1 e non ho inserito il dato
		$errore1="non hai inserito il dato 1<br>";
	}
}
if((isset($_POST['dato_2']) && trim($_POST['dato_2'])!="") &&  $_GET['pg']==1){
	//come sopra
	$_SESSION['dato_2']=$_POST['dato_2'];
	$errore2="";
}else{
		if($_GET['pg']==3){
		$errore1="";
	}else{
		$errore1="non hai inserito il dato 2<br>";
	}
}
if($errore1!="" || $errore2!=""){
	//non inseriti tutti i dati, mostro quali e faccio ripetere
	echo "$errore1 $errore2";
?>
	<a href="000001.php?pg=2">ripeti</a>
<?php
}else{
	//l'inserimento nella pagina 1 è OK, mostro e faccio inserire quelli della 2
	echo "insetito dato 1 ".$_SESSION['dato_1']."<br>";
	echo "insetito dato 2 ".$_SESSION['dato_2']."<br>";
	echo "prosegui<br>";
	/*sono tornato indieteo dalla pagina 3*/
	if(isset($_SESSION['dato_3'])){
		//il dato era stato inserito è quindi lo metto nel value del campo di input
		$dato_3=$_SESSION['dato_3'];
	}else{
		$dato_3="";
	}
	if(isset($_SESSION['dato_4'])){
		$dato_4=$_SESSION['dato_4'];
	}else{
		$dato_4="";
	}
?>
	PAGINA 2<br>
	<form action="000003.php?pg=2" method="post">
	dato 3   <input type="text" name="dato_3" value="<?php echo $dato_3; ?>"><br>
	dato 4   <input type="text" name="dato_4" value="<?php echo $dato_4; ?>"><br>
	<input type="submit" name="pag_2" value="Invia">
	</form>
<?php
}
?>
</body>
</html>
pagina 3
PHP:
<?php
session_start();
?>
<html>
<head>
</head>
<body>
<?php
if((isset($_POST['dato_3']) && trim($_POST['dato_3'])!="") && $_GET['pg']==2){
	$_SESSION['dato_3']=$_POST['dato_3'];
	$errore1="";
}else{
	if($_GET['pg']==4){
		$errore1="";
	}else{
		$errore1="non hai inserito il dato 3<br>";
	}
}
if((isset($_POST['dato_4']) && trim($_POST['dato_4'])!="")  && $_GET['pg']==2){
	$_SESSION['dato_4']=$_POST['dato_4'];
	$errore2="";
}else{
	if($_GET['pg']==4){
		$errore1="";
	}else{
		$errore1="non hai inserito il dato 4<br>";
	}
}
if($errore1!="" || $errore2!=""){
	echo "$errore1 $errore2";
	?>
<a href="000002.php?pg=3">ripeti</a>
<?php
}else{
	echo "insetito dato 1 ".$_SESSION['dato_1']."<br>";
	echo "insetito dato 2 ".$_SESSION['dato_2']."<br>";
	echo "insetito dato 3 ".$_SESSION['dato_3']."<br>";
	echo "insetito dato 4 ".$_SESSION['dato_4']."<br>";
	echo "prosegui<br>";
	if(isset($_SESSION['dato_5'])){
		$dato_5=$_SESSION['dato_5'];
	}else{
		$dato_5="";
	}
	if(isset($_SESSION['dato_6'])){
		$dato_6=$_SESSION['dato_6'];
	}else{
		$dato_6="";
	}
?>
	PAGINA 3<br>
	<form action="000004.php?pg=3" method="post">
	dato 5   <input type="text" name="dato_5" value="<?php echo $dato_5; ?>"><br>
	dato 6   <input type="text" name="dato_6" value="<?php echo $dato_6; ?>"><br>
	<input type="submit" name="pag_3" value="Invia">
	</form>
<?php
}
?>
</body>
</html>
pagina 4
PHP:
<?php
session_start();
?>
<html>
<head>
</head>
<body>
<?php
if((isset($_POST['dato_5']) && trim($_POST['dato_5'])!="") && $_GET['pg']==3){
	$_SESSION['dato_5']=$_POST['dato_5'];
	$errore1="";
}else{
	$errore1="non hai inserito il dato 5<br>";
}
if((isset($_POST['dato_6']) && trim($_POST['dato_6'])!="") &&  $_GET['pg']==3){
	$_SESSION['dato_6']=$_POST['dato_6'];
	$errore2="";
}else{
	$errore2="non hai inserito il dato 6<br>";
}	
if($errore1=="" && $errore2==""){
	echo "FINE PAGINA 4<br>";
	echo "insetito dato 1 ".$_SESSION['dato_1']."<br>";
	echo "insetito dato 2 ".$_SESSION['dato_2']."<br>";
	echo "insetito dato 3 ".$_SESSION['dato_3']."<br>";
	echo "insetito dato 4 ".$_SESSION['dato_4']."<br>";
	echo "insetito dato 5 ".$_SESSION['dato_5']."<br>";
	echo "insetito dato 6 ".$_SESSION['dato_6']."<br>";

	$_SESSION=array();
?>
<a href="000001.php">per riprovare da 1</a></body>
<?php
}else{
	echo "$errore1 $errore2";
?>
<a href="000003.php?pg=4">ripeti</a>
<?php	
}
?>
</html>
intanto provalo così come è, secondo poi ci sone degli altri accorgimenti da prendere
sappimi dire
 
Hai fatto un lavoro immenso. Nei prossimi giorni tornerò a lavorarci e posterò il risultato. Grazie davvero.
 

Discussioni simili