【问题标题】:Send forms to seperate pages for handling, or back to the same page?将表单发送到单独的页面进行处理,还是返回到同一页面?
【发布时间】:2009-08-15 05:27:27
【问题描述】:

将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>

这样好吗,或者我应该将 php 与表单完全分开,然后将一个包含到另一个中...或类似的东西

【问题讨论】:

  • 仅供参考,您在打印表单值时并不需要 isset()。如果收到警告,可以使用display_errors(E_ALL ^ E_STRICT) 隐藏它们。

标签: php html forms


【解决方案1】:

我实际上发现将提交处理逻辑放在一个单独的文件中,该文件将被包含(在我的类中)允许您将逻辑远离演示文稿,但验证/等错误直接出现在您的表单上你期望他们在哪里。我建议的一个小例子:

<?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>

然后在form.process.php中

 <?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;
   }

【讨论】:

    【解决方案2】:

    正如大多数问题的答案一样,这个问题的答案是:“这取决于。”

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

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

    【讨论】:

      【解决方案3】:

      最好把它分开,划分VIEW + Logic。

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

      【讨论】:

        【解决方案4】:

        您描述的方式适用于小页面。如果你想要一些分离,你可以考虑将 HTML 和 PHP 分成两个文件,但你仍然可以将它们放在同一页面上。

        【讨论】:

          【解决方案5】:

          正如其他人所提到的,最好将两个文件分开。但有时,在同一个文件中处理这两者很方便,这样您就可以在不使用会话的情况下重新填充表单。从而为用户节省几分钟。

          【讨论】:

            【解决方案6】:

            我倾向于改变设置不同网站的方式,并且每次我创建一个新网站时都会改变,但我什至开始将我的查询分离到一个 xml 文件中。

            当所有东西都有一个家时,你就知道去哪里修复/增强东西了。提前一个小时可以节省未来几天的时间。

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

            【讨论】:

              猜你喜欢
              • 2017-10-20
              • 2013-09-20
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多