PHP:验证字段后进行表单重定向

时间:2019-12-11 13:24:30

标签: php forms

我已经完成了一个简单的表格,如下所示:

index.php:

<!DOCTYPE HTML>
<html>
  <head></head>
  <body>
<?php
  $name = "";
  if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if (empty($_POST["name"])) {
      // handle missing field
    } else {
      $name = $_POST["name"];
    }
  }
  if($name != '') {
    header('location: http://localhost/new_page.php');
    exit();
  }
?>
    <form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>">
      <span class="label">Name</span>
      <input type="text" name="name">
      <button><span>Validate</span></button>
    </form>
  </body>
</html>

我想要以下行为:

  • 如果用户未设置名称字段,请保留在表单上
  • 如果已设置名称字段,请转到new_page.php

我现在有以下错误:如果设置了名称,我将被重定向到blank.php页面。 有人可以帮我吗?或者至少给我一些调试它的技巧,因为我并不是真正的PHP专家。

谢谢!

2 个答案:

答案 0 :(得分:2)

您的标头调用来不及了。

HTTP响应首先具有标头,然后具有正文。 HTML代码是主体。

您需要将所有输出放在PHP代码之后。由于您以<html>开头,因此已经发送了标头,因此您的重定向将不起作用。

另外,关于白页(死亡或WSOD的白屏):

为了获得最佳的错误记录体验,请将error_reporting设置为-1,关闭display_errors,然后设置一个自定义的error_log。然后在终端中,键入“ tail -f / path / to / error_log”。现在,您的通知,警告和错误将实时滚动显示,而不会影响网页的显示。

答案 1 :(得分:0)

@ delboy1978uk给出的答案是正确的。 您要做的就是将文件内容更改为:

<?php
  $name = "";
  if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if (empty($_POST["name"])) {
      // handle missing field
    } else {
      $name = $_POST["name"];
    }
    if($name != '') {
      header('location: http://localhost/new_page.php');
      exit();
    }
  }

?><!DOCTYPE HTML>
<html>
  <head></head>
  <body>
    <form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>">
      <span class="label">Name</span>
      <input type="text" name="name">
      <button><span>Validate</span></button>
    </form>
  </body>
</html>