2012-07-04 2 views
1

У меня есть многостраничный сайт формы, который я создаю.PHP Данные сеанса многостраничной формы теряются после двух навигаций

Я использую

$_SESSION['X']=$_POST['X'] 

для хранения переменных из формы в сессии на странице результатов, размещаются в.

Форма динамически генерируется так, чтобы поля были заполнены переменные сессии

$X=$_SESSION['X'] 

и

(value="$X") 

Таким образом, когда пользователь нажимает назад (кнопка с URL страницы, а не история -1) страница преобразуется со значениями, которые они ранее вводили.

Мои проблемы в том, что это работает отлично для одной страницы (то есть они могут вернуться на одну страницу и увидеть значения), но 2 страницы все значения пустые.

Как только значения хранятся на СЕССИИ, они не должны оставаться на время сеанса браузера? Они не перезаписываются. Я не понимаю, что произошло? Любая помощь оценивается. Пример

Код:

Page 1:

session_start(); 

//populates fields if session value set for this variable 
$sv_01=$_SESSION['sv_01']; 

<<<EOT 
<form action="page 2 URL" method="post"> 
<label> q1 <input value=$sv_01 title="title" type="text" name="sv_01"> 

<input type="submit" value="Continue" /> 
</form> 
EOT; 

Page 2:

session_start(); 
//stores POST data from page 1 in the session 
$_SESSION['sv_01']=$_POST['sv_01'] 

//populates fields if session value set for this variable 
$sv_02=$_SESSION['sv_02']; 

<<<EOT 
<form action="page 3 URL" method="post"> 
<label> q2 <input value=$sv_02 title="title" type="text" name="sv_02"> 

<input onclick="page 1 URL';" type="button" value="Back" /> <input type="submit" value="Continue" />  
</form> 
EOT; 

Page 3:

session_start(); 
//stores POST data from page 2 in the session 
$_SESSION['sv_02']=$_POST['sv_02'] 

//populates fields if session value set for this variable 
$sv_03=$_SESSION['sv_03']; 

<<<EOT 
<form action="page 4 URL" method="post"> 
<label> q3 <input value=$sv_03 title="title" type="text" name="sv_03"> 

<input onclick="page 2 URL';" type="button" value="Back" /> <input type="submit" value="Continue" />  
</form> 
EOT; 

Переход от страницы 3 к 2 будет в порядке - и стр. 2 - 1, но переход от страница 3 - 1 приведет к тому, что страница 1 будет пустой.

Любые идеи? Большое спасибо

+0

Все вары пусты, когда вы возвращаетесь на первую страницу? –

+1

Я не вижу причин в примере, который вы показали нам выше, почему это произойдет, но вы должны проверить, установлен ли сеанс перед его использованием, также, как пустым? все пустые? вы можете сделать print_r из $ _SESSION, уверены ли вы, что вы переходите со страницы 3 на 1? Поскольку вы можете настроить сеанс 1 на ничего, из-за session1 = post1 на вашей 2-й странице, которую вы не проверяете, если есть сообщение, и т. Д. –

+0

@MarcioSimao да все пустоты, когда я возвращаюсь на первую страницу – Gideon

ответ

3

Возможно вы перезапись $_SESSION вара со значением NULL, что исходит от $_POST, потому что если вы прыгаете от Page3.php к Page2. php с использованием ссылки $_POST контента не существует.

Таким образом, вы можете решить эту проверку, если существует значение $_POST, прежде чем назначить его значение $_SESSION. Что-то вроде этого кода:

Page 2.php

if(isset($_POST['sv_01']) 
    $_SESSION['sv_01']=$_POST['sv_01']; 

Page 3.php

if(isset($_POST['sv_02'])) 
    $_SESSION['sv_02']=$_POST['sv_02']; 
+0

Фантастический - это было именно оно. Я выберу ваш ответ, поскольку у него было несколько ясное утверждение о том, почему он сломал его, чем @ user1404632 ниже. Благодарю вас обоих! – Gideon

1

Возможно, попробуйте проверить, установлены ли элементы $ _POST.

Вместо:

$_SESSION['sv_01']=$_POST['sv_01'] 

Попробуйте

if (isset($_POST['sv_01'])) { 
    $_SESSION['sv_01']=$_POST['sv_01'] 
} 
+0

Большое спасибо за вашу помощь! – Gideon