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?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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']; 
}
//...
?>
 

alvall

Nuovo Utente
22 Giu 2013
6
0
0
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.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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
 

alvall

Nuovo Utente
22 Giu 2013
6
0
0
Hai fatto un lavoro immenso. Nei prossimi giorni tornerò a lavorarci e posterò il risultato. Grazie davvero.
 
Discussioni simili
Autore Titolo Forum Risposte Data
M form da distribuire su più pagine PHP 1
C [PHP] Form inserimento più menù a discesa PHP 9
F [Javascript] Conflitto tra più form nella stessa pagina Javascript 1
P [HTML] Passaggio Url tramite Form non funziona più HTML e CSS 8
S [PHP] Recupero più dati da form realizzata ciclo FOR PHP 5
J Inserimento dati in db da due o più form PHP 0
E Un form, due o più invii Javascript 1
J Ciao ho bisogno di capire, perché questo form non funziona più sul sito ASP.NET 0
B jQuery mobile e più form ajax jQuery 1
neo996sps PIù azioni sullo stesso form PHP 1
D Stessa funzione tra 2 o più form Javascript 1
A Invio più form con singolo submit Javascript 0
D Più tabelle collegate per una form .NET Framework 2
A Form con più submit help! Javascript 1
T [ADOdb] Integrare più funzioni con una sola form PHP 1
M Interazione tra un più campi di un form con un solo campo di database - query mysql PHP 2
B Invio tramite form mail di più allegati PHP 0
S passare un valore da un form a un file .php con metodo post PHP 4
K Form che manda dati doppi PHP 1
K Problema form update PHP 2
Elisacau [Contact form 7] Inserire Numero auto incrementante WordPress 1
K form Inserimento record mysql PHP 2
I Form con selettore HTML e CSS 0
K [php]form invio dati PHP 0
G form invio multiplo con checkbox PHP 12
nivaria.achinet Intercettare form solo dopo invio Javascript 1
D Form contatti non funzionante HTML e CSS 0
A Stampare dati da form PHP 8
M Unire 2 funzioni per l'invio di un form e con l'apertura di un div Javascript 0
I Form HTML e CSS 17
otto9due $_FILE non passa i dati dal form PHP 1
M Form: come tornare ai campi già compilati dopo invio PHP 1
G Invio form con PHP PHP 3
felino Form action costum e parametri in queryString WordPress 1
M Come recuperare molteplici input form PHP 1
M Collegamento tra form html e script php PHP 4
L form immagini per il database PHP 0
A form PHP prenotazione tramite query PHP 2
A Form php prenotazione di un azienda sanitaria locale presso studio medico PHP 1
L inserimento form dati multipli ? PHP 0
L Problemi form Pagina php HTML e CSS 3
Cosina Creare bottone delete in form upload PHP 5
Cosina Creare bottone delete in form upload PHP 1
D Devo far funzionare un form di contatti PHP 4
B form gestione input PHP 2
V PHP form intersecate PHP 0
8 Javascript - PDF Form Javascript 0
J Form inserimento dati in database Ajax 1
E Gestione profilo utente tramite Form PHP 3
R [C#] Form principale si blocca mentre un altro Thread lavora .NET Framework 0

Discussioni simili