我正在努力理解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 :(得分: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页没有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;