PHP:刷新无效表单提交页面

PHP:刷新无效表单提交页面,php,html,forms,Php,Html,Forms,如何在提交时刷新带有表单的页面,以等待提交数据的结果并显示结果 e、 g我有一个带有表格的页面: <form action="" method="post"> <input type="name" value="" name="name" placeholder="Your Name" /> <input type="button" name="submit" value="submit form "/> </form> form_e

如何在提交时刷新带有表单的页面,以等待提交数据的结果并显示结果

e、 g我有一个带有表格的页面:

<form action="" method="post">
   <input type="name" value="" name="name" placeholder="Your Name" />
   <input type="button" name="submit" value="submit form "/>
</form>
form_engine.php检查输入

$success = "true";
$errorMessage = " ";
$name = $_POST['name'];

if ( $name == '') {
      $errorMessage = 'Please enter your name';
      $success = false;
}
else (if $success = true) {
   // do something with the data

}
表单页面包含以下结果:

<form action="" method="post">
   <input type="name" value="" name="name" placeholder="Your Name" />
   <input type="button" name="submit" value="submit form "/>
</form>
<p><?php echo $errorMessage; ?></p>


错误提交表单后是否会显示错误消息?或者我必须使用会话来存储它吗?

您需要这样的东西:

if (!isset($_POST['name']))
而不是

if ( $name == 'name')
更新

试试这个,它会让你产生这样的想法:

<?php

    $errorMessage = false;

    if (isset($_POST['submit'])) {

        if (!isset($_POST['name']) || $_POST['name']=='') {
            $errorMessage = 'Please enter your name';
        }
        else {
           // do something with the data
           echo "Success!!";
        }
    }
?>

<form method="post">
   <input type="name" value="" name="name" placeholder="Your Name" />
   <input type="submit" name="submit" />
</form>
<p><?php if ($errorMessage) echo $errorMessage; ?></p>

注意:省略
action
属性只会将表单提交到当前页面


注2:这里的PHP很可能存储在另一个页面中。使用
require()!header()方法


您可以在php端使用重定向:

header('Location: www.mysite.com/index.php');

您似乎对呈现页面的确切过程有点困惑,一些评论也是如此。您不需要使用会话来解决此问题。页面请求之间不需要在服务器端存储任何内容,因为用户的浏览器会保留您所需的一切,至少在这种情况下是这样。我猜是其他人让你提到了“外部引擎”,并认为表单将提交到不同的站点/页面


形成循环 下图显示了一个典型的表单请求循环:

您不必这样做,因为编码与个人偏好有关,但通常情况下,人们会将表单设计为提交回生成表单的同一URI,就像您在示例中所做的那样,将action属性留空。通过这样做,只要您将希望传递回服务器端的所有内容嵌入表单中(每次用户提交时),该信息就会重新发送并在PHP中可用

显然,您需要小心哪些信息可能构成敏感信息,因为只有在您的请求受到HTTPS/SSL保护的情况下,才应该将这些数据写入标记中。您还应该过滤/转义任何用户输入,以防止标记注入站点。使用可以防止许多问题,但这可能会导致问题,具体取决于您试图从用户获取的值。因为您使用的是双引号HTML属性(正确的方法;),所以我没有设置
entu QUOTES
选项


回到正题 因此,在上面的循环中,用户将第一次看到表单,并在任何后续提交之后看到表单,这意味着每次PHP发现有错误时,您都可以将消息添加到页面流中。这种系统的诀窍是,一旦表单完全完成,您到底要做什么。为了摆脱循环,大多数人将使用标题位置调用:

<?php

require_once 'form_engine.php';

$name = !empty($_POST['name']) ? trim($_POST['name']) : '';
$name = htmlentities($name);

if ( $success ) {
  header('location: next-step.php');
  exit;
}

?>
<form action="" method="post">
  <input type="name" value="<?php echo $name; ?>" name="name" placeholder="Your Name" />
  <input type="button" name="submit" value="submit form "/>
</form>
<?php

if ( $errorMessage ) {
  echo "<p>$errorMessage</p>";
}

?>


如果我错了,请纠正我,但是
值=”
是否会强制设置该值,并只使用空值?编辑:等等。。Html。。是的,我错了。这不是问题的重点。我想知道如何刷新页面,而不是检查名称是否已发布。@user3143218何时刷新页面?当用户单击“提交”时。很抱歉,忘记在示例中添加“提交”按钮。@user3143218当用户点击“提交”时,页面将自动刷新到
操作
中的任何url,在您的情况下,该url就是当前页面。我不确定我是否理解你的问题。是的,使用会话。在这里阅读更多:作为一个副业,您的
form_engine.php
有一些语法和逻辑错误
else(如果
($success=true)
$success=“true”;
如果(
($success==true))这些应固定为
else
$success=true;
如果您在同一页面上提交表单,那么就不需要使用会话,但在您的情况下,您希望使用form_engine.php作为单独的php表单提交代码处理程序,因此,您必须使用会话来存储$errorMessage的值,然后才能在表单中访问它。哇!感谢您的帮助这是一个非常好的答案。这非常有帮助!@user3143218~没问题,现在你的下一步是在哪里/如何存储提交的详细信息:)如果你正在构建一个一次性表单,你可以在出发前直接存储到数据库。如果你正在构建一个表单链(推荐,而不是一个长长的单数表单..就用户体验而言),最好查看会话或构建一些函数,以帮助您聚合用户输入,并创建一个动态表单,该表单根据用户所处的“步骤”进行更新,即随着用户的进展重写可用的输入。实际上,我正在考虑创建一个类似(“步骤”)的列,当每个步骤完成时,我可以更新值(即-step1、step2、step3、completed)。这样,用户可以离开并返回,并存储他们的进度。然后,我可以检查值是否也以这种方式完成。我自己会小心使用该路径,这不是一个坏主意,但最好围绕存储的用户信息设计表单步骤,而不是基于他们在僵硬的页面系统中的感知位置。例如,想象一下,稍后在步骤流程中添加一个新字段。如果您支持在完成过程中中途返回的用户(您将需要会话/cookies/localStorage),您会希望这些用户返回到现在缺少的值所在的位置,以便可以填写该值。如果您总是在每个请求上计算他们的“位置”(根据他们遗漏的答案),你可以免费获得这种行为。
header('Location: www.mysite.com/index.php');
<?php

require_once 'form_engine.php';

$name = !empty($_POST['name']) ? trim($_POST['name']) : '';
$name = htmlentities($name);

if ( $success ) {
  header('location: next-step.php');
  exit;
}

?>
<form action="" method="post">
  <input type="name" value="<?php echo $name; ?>" name="name" placeholder="Your Name" />
  <input type="button" name="submit" value="submit form "/>
</form>
<?php

if ( $errorMessage ) {
  echo "<p>$errorMessage</p>";
}

?>