PHP和JS中表单验证的最佳方式

时间:2012-09-04 11:04:22

标签: php javascript forms validation

我想知道实际表格验证的最佳方法是什么。

JavaScript做了一个非常好的jon,但它不是一个可靠的验证的基础,因为它可以被操纵甚至禁用。

如果您使用PHP检查数据并在发生错误时重新填充表单,则表单有几个问题。

  • 如果显示的表单没有重定向,那么如果用户想要重新发送数据,F5会显示一个确认框,这不是很漂亮。
  • 如果再次将用户重定向到表单,则必须由GETPOST提交数据。使用POST,再次出现如上所述的F5问题。对于GET,在内部使用&传输值时会出现问题(PHP会在符号后面猜出另一个参数)
  • 第三种方式是将数据存储在数据库中,例如, SUBMITTRIALS或类似的东西。但是,实际上你必须在重定向后清除数据。

另一个问题是重新填充表单本身:这样的代码:

echo "<input type='text' value='".$val."' />";
如果变量$val包含包含撇号的值,则

会出现问题,这会生成无效的HTML。

正如您所看到的,表单验证方案中存在很多失败的可能性。如上所述,处理表单验证的最可靠方法是什么?

4 个答案:

答案 0 :(得分:2)

服务器端语言是验证表单的唯一方法。您可以将表单数据存储在会话或cookie中以用于相同目的。完成验证后,您可以清除它们。如果您的数据中的引号有问题,那么您可以使用PHP内置函数addslashes()stripslashes()来避免它们。

答案 1 :(得分:1)

你的三个要点,一个接一个:

  1. 是的,这是正确的,不是,它不是很优雅。但正如你所说:重定向解决了这个问题。所以重定向。
  2. 不,将&符号转换为&amp;不应该造成问题
  3. 为什么要使用数据库来存储这样的数据?会话有什么问题?或者,如果需要必须:一个cookie?
  4. 在恢复中:重定向以避开确认框,如果您需要存储一些提交的数据服务器端并将&符号转换为其html实体并且您已全部设置,请使用会话。转换&可以这样实现:

    var tmpDiv = document.createElement('div');
    tmpDiv.innerText = '&';
    var entity = tmpDiv.innerHTML;//returns &amp;
    

答案 2 :(得分:0)

我有一些解决方案。

  1. 您需要将用户重定向到同一页面并松开帖子数据。

    header("Location: samefile.php?success=true");//or ?errors[]=blabla
    exit();
    
    if(isset($_GET['success']) && $_GET['success'] == true){
        //handle true
    }else if(/* here you can ask about errors or what ever */){
    
    }
    

    通过这种方式,您可以避免在刷新时重新发送数据。

  2. 使用$ _SESSION存储数据而不是数据库。

  3. 如果我错了,请纠正我。

答案 3 :(得分:-2)

我正在使用jquery表单验证器,这非常有用。

你头上的标签

<script language="javascript" type="text/javascript" src="/media/js/jquery-latest.js"></script>

<script language="javascript" type="text/javascript" src="/media/js/jquery.validate.min.js"></script>
<script>
  $(document).ready(function(){
    $( "#commentform" ).validate();
  });
</script>

然后使用这样的表格:

  <form id="commentform" action="/index/addcomment" method="POST">

    <p>
      <input type="text" name="Name" id="name" value="" size="22" class="required" minlength="3">
      <label for="name"><em>*</em><?= _("Name") ?></label>
    </p>

    <p>
      <input type="text" name="EMail" id="email" value="" size="22" class="required email">
      <label for="email"><em>*</em><?= _("EMail") ?> <?= _("(will not be published)") ?></label>
    </p>

    <p>
      <input type="text" name="Url" id="url" value="" size="22">
      <label for="url"><?= _("Website") ?></label>
    </p>

    <p>
      <textarea name="Content" id="comment" cols="100%" rows="10" class="required" minlength="5"></textarea>
    </p>

    <p>
      <input name="submit" type="submit" id="submit" tabindex="5" value="Submit Comment">
      <input type="hidden" name="BlogId" value="<?= $this->model->BlogId ?>" />
    </p>

  </form>

更多信息:http://docs.jquery.com/Plugins/Validation