Php 将表单发送到单独的页面进行处理,还是返回到同一页面?

Php 将表单发送到单独的页面进行处理,还是返回到同一页面?,php,html,forms,Php,Html,Forms,是将html表单发送到单独的页面,还是将其发送回同一页面 我一直听到将逻辑与表示分离,所以我想知道是否也应该将表单与表单处理程序分离 到现在为止,我正在做这个 <?php if(isset($_POST['submitted'])){ //Validate the form if(empty($_POST['name'])){ $errors['name'] = 'Please enter your name'; } //IF no errors INSERT

是将html表单发送到单独的页面,还是将其发送回同一页面

我一直听到将逻辑与表示分离,所以我想知道是否也应该将表单与表单处理程序分离

到现在为止,我正在做这个

<?php

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

  //Validate the form
  if(empty($_POST['name'])){
    $errors['name'] = 'Please enter your name';
  }

  //IF no errors INSERT INTO database and redirect
}
?>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
  <input type="text" name="name" value="<?php if(isset($_POST['name'])) echo $_POST['name']; ?>" />
  <?php if(isset($errors['name'])) echo '<span class="error">'.$errors['name'].'</span>'; ?>
  <input type="submit" />
</form>


正如大多数问题的答案一样,这个问题的答案是:“视情况而定。”

作为一般规则,最好让代码“处理”提交,而不是仅仅显示表单的页面。然而,我经常发现,对于较小的表单(即那些做得不多的表单),将该逻辑分离所增加的复杂性不值得将其分离


经典表单提交的一种常见方法是在
index.php
上显示代码,将其提交到
save.php
,然后重定向回
index.php
(或另一个页面),这样理论上
POST
将不再是最近显示的页面,刷新页面不会重新提交表单(当然,请注意,并非所有浏览器都始终遵循该逻辑)。

最好将其分开,将视图与逻辑分开


最佳方式:外部文件中的CSS、外部文件中的JS、外部文件中的php。

您所描述的方式适合于小页面。如果你想分开,你可以考虑把HTML和PHP分成两个文件,但是你仍然可以把它们放在同一个页面。

< P>正如其他提到的那样,将两个文件分开是很好的。但有时,在同一个文件中处理这两个问题很方便,这样您就可以在不使用会话的情况下重新填充表单。这样可以为用户节省几分钟时间。

我倾向于改变设置不同站点的方式,每次我创建一个新站点时,它都会发生变化,但我甚至开始将我的查询分离到一个xml文件中

当一切都有了家,你就知道去哪里修理/改进东西了。提前一小时可以节省未来几天的时间


如前所述,分离的重要性随着应用程序的大小而增加。在宣传册网站上的一个简单的评论表单——我可以将表单处理正确地放在同一个文件中。

我发现将提交处理逻辑放在一个单独的文件中(在我的A类课程中)可以让您的逻辑远离演示,但是,请将验证错误/etc直接显示在您希望它们出现的表单上。我提议的一个小例子:

<?php // form.php
  $form = array(
     "test"=>"default value",
  );
  $errors = array();

  if (count($_POST)) {
    include "form.process.php";
  }

  if (count($errors)) {
    echo "<ul class='errors'>";
    foreach ($errors as $error) {
      echo "<li>".htmlentities($error)."</li>";
    } 
    echo "</ul>";
  }
?>
<form method="POST"> <!-- no action means submit to the same page you are on -->
<input type='text' name='test' value='<?php echo $form["test"]; ?>'/>
<input type='submit'>
</form>

FYI打印表单值时,您实际上不需要isset()。如果您收到警告,可以使用
显示错误(E\u ALL ^E\u STRICT)
来隐藏它们。
 <?php
   if (isset($_POST['test')) {
     $test = $form['test'] = $_POST['test'];
     if (!trim($test)) // empty string? {
       $errors[] = "Please fill in test field";
     }
   }

   if (!count($errors)) {
     header("Location: formsubmitted.php");
     exit;
   }