页面之间丢失表单数据

时间:2014-02-04 03:52:47

标签: php forms session

我正在努力理解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>

5 个答案:

答案 0 :(得分: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']为空。

只需在第2页上回显$_SESSION['name']即可享受。

答案 2 :(得分:1)

您在第二页上复制了$_SESSION['name']=$_POST['name'];POST数据仅在表单提交的页面上可用...因此,当用户到达页面的第二页时,值为空。

将空值设置为会话是问题

答案 3 :(得分: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。

答案 4 :(得分:-2)

一旦设置了会话,您就可以再次调用该特定会话

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

一旦会话已在下一页开始,您就可以调用它

//simply like this
echo $name;
相关问题