我对超全球$_POST
存在概念性问题
它应该随时可用,无需任何声明。
我有三个简单的脚本:
脚本1 - home.php
<?php
SESSION_START();
?>
<html> <head> <title>Home</title> </head>
<body>
<!-- this form will pass $_POST["pd"] to check.php -->
<form name="input" action="check.php" method="post">
<input type="password" name="pd" size="15" maxlength="14">
<input type="submit" value="Submit">
</form>
</body>
</html>
?>
脚本2 - check.php
<?php
SESSION_START();
if ($_POST["pd"] == "hello")
{ header( 'Location: http://127.0.0.1/PP/ok.php' ) ; }
?>
脚本3 - ok.php
<?php
SESSION_START();
foreach($_POST as $key => $value) {
echo $key;
echo " = ";
echo $value;
}
echo "password = ".$_POST["pd"];
?>
<html> <head> <title>PasswordOK</title> </head>
<body>
Password OK
</body>
</html>
脚本1:显示一个表单,我输入密码hello
并将其提交给脚本2。
脚本2:检查超级全局$_POST["pd"] == "hello"
,因为它是正确的,它会将我发送到脚本3.它不会发出Undefined index
错误。
脚本3:foreach
循环应该访问$_POST["pd"]
超全局并显示pd = hello
。它没有显示任何内容 - 它没有给我Undefined index
错误。
echo "password = ".$_POST["pd"];
应显示password = hello
。它会显示password =
并显示Undefined index
错误。
HTML块正常运行并显示日期和消息。
这是我的问题。
由于$_POST["pd"]
是超全球,因此永远不会引起Undefined index
错误
那么为什么呢?
你的许多答案都说我应该检查$_POST["pd"]
是否确实存在 - 但我不必为脚本2做那个,所以我为什么要为脚本3做那个?
我错过了什么吗?
$_POST["pd"]
是超全球还是不是?如果是,那为什么它会给出Undefined index
错误?
有人可以帮忙吗?
感谢。
答案 0 :(得分:2)
header(...)
行告诉浏览器从check.php
导航到ok.php
。浏览器此时会发出GET
个请求,$_POST
将不再可用。
要更好地了解正在发生的事情,请查看浏览器Web检查器中的“网络”标签。
那就是说,为了更好地解决你的问题并提供解决方案,请考虑:
如果你绝对需要重定向(即需要调用
header
)而不能include
或require
,那么你可以将var存储在会话中:$ _SESSION ['pd' ] = $ _POST ['pd']。HTTP协议没有状态,这就是您可以使用会话和cookie的原因。
答案 1 :(得分:0)
您没有将脚本2中的$_POST
发送到script3。如果你从不使用它,你的$_SESSION
也没用。您可以将post变量放在会话中,然后可以在script3中访问它。
SCRIPT2:
$_SESSION['pd'] = $_POST['pd'];
Script3
echo $_SESSION['pd'];
答案 2 :(得分:0)
您正在做的是:
表单POST到脚本2,发布的数据仅在此请求的$_POST
中可用,在script2中。该脚本对该数据没有太大作用,并且不会将其保存在任何地方,而是将客户端重定向到另一个脚本。客户端对script3执行了全新的请求。 script3无法访问POST到上一个脚本的POST数据,因为这是一个全新的请求。
它与superglobals没有任何关系。