【发布时间】:2016-07-13 20:59:49
【问题描述】:
无法使用此代码读出 $_POST 变量。你能告诉我问题出在哪里吗?条件块不起作用。
从浏览器读取 POST 内容时,值似乎已设置和传输。
<!doctype html>
<?php
// select post operation
echo "post=".$_POST["action"];
if ($_POST["action"] == "add"){
// insert and read out values from DB
echo "add-".$_POST["action"];
header("Location:".($_SERVER['PHP_SELF']));
unset($_POST);
} elseif ($_POST["action"] == "delete"){
echo "add-".$_POST["action"];
header("Location:".($_SERVER['PHP_SELF']));
unset($_POST);
}
else{
echo "why else after submit.";
}
$_REQUEST = $_POST = $_GET = NULL;
?>
<html lang="de">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>test</title>
</head>
<body>
<div>
<form action="<? echo ($_SERVER['PHP_SELF']);?>" method="post">
<input type="hidden" name="action" value="add">
<input type="submit" value="Submit">
</form>
</div>
</body>
</html>
【问题讨论】:
-
实际上,您在回显之后有一个重定向,因此您可能没有足够的时间阅读它,因为它会重新加载页面。注释掉重定向代码并检查它是否回显。
-
unset($_POST);和$_REQUEST = $_POST = $_GET = NULL;是非常糟糕的做法。 -
$_POST在您第一次打开页面时不会填写,只有在您提交表单后才能填写。 -
注释掉但没有帮助
-
@FirstOne:应该是配置。默认情况下,PHP 不会在启用输出缓冲的情况下运行。在大多数标准安装中,OP 的代码会产生“标头已发送”警告。由于没有提及此类警告/错误,因此它们可能在 display_errors/error_reporting 关闭的情况下运行。