2014-02-04 7 views
0

Я стараюсь понять команду session(), даже после прочтения многочисленных страниц об этом.Данные формы, потерянные между страницами

Я не могу получить данные из формы, чтобы появиться на следующей странице

Вот два очень упрощенные версии моих страниц, может кто-то объяснить, что отсутствует, пожалуйста,


«submitform.php» ...

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 

<head> 
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> 
<title>Submit Form</title> 
</head> 

<body> 

<?php 
session_start(); 
$_SESSION['name']=$_POST['name']; 
$_SESSION['email']=$_POST['email']; 


if ($_SERVER["REQUEST_METHOD"] == "POST") 
{ 
header('Location: displayform.php'); 
} 


?> 

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 
Name <input type="text" name="name"/><br/> 
Email address <input type="text" name="email"/><br/> 
<input class="submit" type="submit" name="submit" value="SUBMIT"/> 
</form> 

</body> 

</html> 

"displayform.php" ...

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 

<head> 
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> 
<title>Display Form</title> 
</head> 

<body> 

<?php 
session_start(); 
$_SESSION['name']=$_POST['name']; 
$_SESSION['email']=$_POST['email']; 

$name = $_SESSION['name']; 
$email = $_SESSION['email']; 

echo "Name: " . $name . "<br>"; 
echo "Email: " . $email; 


?> 

</body> 

</html> 
+0

Почему вы хотите использовать сеанс там? почему бы не просто отправить из submitForm на страницу displayForm? – aiiwa

+0

Включите 'display_errors' и включите' error_reporting', всегда в разработке. 'Error_reporting (E_ALL); ini_set ('display_errors', 1); 'Вы должны видеть ошибки - PHP жалуется на уже отправленные заголовки. –

+0

'session_start()' нужно вызывать _ перед любым выходом_. Переместите вызов 'session_start()' на самый верх вашего скрипта, перед отправкой вывода HTML. –

ответ

2

Этот код немного странный, но я предполагаю, что это просто понимание сессий, так что вы здесь.

Как говорили другие, начните сеанс в верхней части каждой страницы. После отправки формы храните значения в переменных сеанса и перенаправляйте их на страницу отображения. Там вы просто показываете сессии, которые вы сохранили на первой странице.

submitform.php

<?php 
session_start(); 
if ($_SERVER["REQUEST_METHOD"] == "POST") 
{ 
$_SESSION['name']=$_POST['name']; 
$_SESSION['email']=$_POST['email']; 
header('Location: displayform.php'); 
} 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 

<head> 
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> 
<title>Submit Form</title> 
</head> 

<body> 

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 
Name <input type="text" name="name"/><br/> 
Email address <input type="text" name="email"/><br/> 
<input class="submit" type="submit" name="submit" value="SUBMIT"/> 
</form> 

</body> 

</html> 

displayform.php

<?php 
session_start(); 
$name = $_SESSION['name']; 
$email = $_SESSION['email']; 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 

<head> 
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> 
<title>Display Form</title> 
</head> 

<body> 
<?php 
echo "Name: " . $name . "<br>"; 
echo "Email: " . $email; 
?> 
</body> 

</html> 
1

1-я страница, которую вы устанавливаете $_SESSION['name'] = $_POST['name']; отлично.

на странице2 вы делаете то же самое. На странице 2 нет POST['name'], поэтому $_SESSION['name'] пуст.

просто эхо $_SESSION['name'] на странице 2 и наслаждайтесь.

1

Вы дублируете $_SESSION['name']=$_POST['name']; на второй странице. Данные POST доступны только на странице, представленной формой ... поэтому к моменту достижения пользователем второй страницы значения пустые.

Установки пустых значений сессии является вопросом

+1

Также я считаю, что вам нужно иметь session_start() перед любым HTML. – Dan

-2

раз сеанс установлен, вы можете просто позвонить еще раз, что конкретной сессии

$name = $_SESSION['name']=$_POST['name']; 
$email = $_SESSION['email']=$_POST['email']; 

когда сессия уже началась на следующей странице вы можете просто Называйте это

//simply like this 
echo $name; 
+0

Это не сработает. Я думаю, вы имели в виду, 'echo $ _SESSION ['name'];' и в первой части вы должны были упомянуть, что все это должно быть завернуто в некоторый код. – krowe

0

Я сделал несколько изменений в коде, как

"submitform.php" ...

<?php 
    session_start();// should be top of the page 
if(isset($_POST,$_POST['name'],$_POST['email'])){ 
    if ($_POST['name']!='' && $_POST['name'] !='') 
    { 

     $_SESSION['name']=$_POST['name']; 
     $_SESSION['email']=$_POST['email']; 
     header('Location: displayform.php'); 
    } 

} 

и "displayform.php" ...

<?php 
    session_start(); 

     $name = $_SESSION['name']; 
     $email = $_SESSION['email']; 

     echo "Name: " . $name . "<br>"; 
     echo "Email: " . $email; 
    ?> 

начать сеанс @ в верхней части страницы.

Изменить форму отправки. Действие тега формы php-файла как displayform.php.

Смежные вопросы