【问题标题】:$_POST read out values in PHP$_POST 在 PHP 中读出值
【发布时间】: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 关闭的情况下运行。

标签: php forms post


【解决方案1】:

您永远不会检查是否实际执行了 POST,因此您的 if() 链总是会执行。当您第一次点击该页面时,会将其作为 GET 加载,因此您会收到 why else after submit 错误。

你需要更多这样的东西:

if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
   ... check form submission, echo confirmation/errors, blah blah blah
}
... output html ...

【讨论】:

    【解决方案2】:

    因为您使用

    重定向到另一个页面
    header("Location:".($_SERVER['PHP_SELF']));
    

    实际上,您重定向到同一页面,因此使用空的 $_POST 变量为您提供了一个全新的(相同的)页面

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-21
      • 1970-01-01
      • 1970-01-01
      • 2016-05-04
      • 1970-01-01
      • 2016-02-21
      相关资源
      最近更新 更多