$\u用PHP发布读取的值

$\u用PHP发布读取的值,php,forms,post,Php,Forms,Post,无法使用此代码读取$\u 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["

无法使用此代码读取$\u 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>

测试

您从不检查是否实际执行了POST,因此始终会执行
if()
链。当您第一次点击页面时,它将作为GET加载,因此您会在提交后收到
why else
错误

你需要更像这样的东西:

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

您从不检查是否实际执行了POST,因此始终会执行
if()
链。当您第一次点击页面时,它将作为GET加载,因此您会在提交后收到
why else
错误

你需要更像这样的东西:

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

因为你重定向到另一个带有

header("Location:".($_SERVER['PHP_SELF']));

实际上,您重定向到了同一个页面,因此一个全新的(相同的)页面会被提供给您一个空的$\u POST变量,因为您重定向到了另一个带有

header("Location:".($_SERVER['PHP_SELF']));

实际上,您重定向到同一个页面,这样一个全新的(相同的)页面会被提供给您一个空的$\u POST变量

实际上,您在回显之后有一个重定向,因此您可能没有足够的时间阅读它,因为它会重新加载页面。注释掉重定向代码并检查它是否有回声。取消设置($\u POST)是非常糟糕的做法
$\u REQUEST=$\u POST=$\u GET=NULL
$\u POST
只有在您提交表单后,才会在首次打开页面时填写。已注释,但不会help@FirstOne:应该是配置。默认情况下,PHP不会在启用输出缓冲的情况下运行。在大多数标准安装中,OP的代码会产生“headers ready sent”警告。由于没有提到这样的警告/错误,可能它们正在运行,而display\u errors/error\u reporting处于关闭状态。实际上,您在回显之后有一个重定向,因此您可能没有足够的时间阅读它,因为它会重新加载页面。注释掉重定向代码并检查它是否有回声。取消设置($\u POST)是非常糟糕的做法和
$\u REQUEST=$\u POST=$\u GET=NULL
$\u POST
只有在您提交表单后,才会在首次打开页面时填写。已注释,但不会help@FirstOne:应该是配置。默认情况下,PHP不会在启用输出缓冲的情况下运行。在大多数标准安装中,OP的代码会产生“headers ready sent”警告。由于没有提到这样的警告/错误,可能它们正在运行时显示错误/错误报告处于关闭状态。