使用PHP和javascript进行HTML表单验证的简便方法

时间:2012-06-04 12:33:42

标签: php javascript ajax validation

我正在开发一个PHP应用程序。它以html形式包含在其中 我的问题是如何以简单的方式实现表单验证,而无需在服务器(使用PHP)和浏览器(使用Javascript)上复制验证代码。
我已经设计了一个使用ajax的方法。当输入失去焦点(onblur事件)时,它将使用它包含的数据对服务器进行ajax调用。如果值无效,则响应将是错误消息,否则为空字符串。 但是代码在服务器和浏览器上都非常臃肿,可能非常多。 你能指出我正确的方向吗?总是输入验证复杂或我应该使用不同的方法? 非常感谢那些花时间阅读我的帖子的人,以及那些回答的人的额外坦克。

6 个答案:

答案 0 :(得分:1)

输入验证非常复杂。您需要确保输入对您的数据类型完全有效。这通常包括每个项目的自定义验证。客户端和服务器端验证都没有替代。

客户端验证提供了一个快速的ui。用户键入的每个内容都可以并且应该在客户端验证,以便不必向服务器发出请求(减少延迟)。这并不意味着它是服务器端验证的替代品,因为任何人都可以通过firebug等工具看到请求,并将他们想要的任何数据提交给您的服务器。

服务器端你必须确保数据符合预期的类型,或者你可以自己打开sql注入或许多其他恶意攻击。

这实际上是查看许多php mvc框架中的任何一个的非常好的理由。大多数包括表单助手,这将显着减少您必须编写的代码以进行验证。

答案 1 :(得分:1)

您始终需要服务器端验证。但是,依靠第三方库,您可以在客户端使您的生活更轻松。

进行基本验证的最简单方法是使用HTML5。这包括必填字段,数字范围和正则表达式检查等内容。不需要第三方库,不支持HTML5的浏览器将忽略验证。这没有问题,因为输入将在服务器上验证。

另一种方法是使用jQuery validation extension。使用此库,您只需在表单域中输出一些类。

如果您使用Zend_Form库生成表单并进行验证,则可以查看以下文章:http://codeutopia.net/blog/2008/04/04/client-side-validation-with-zend_form/

答案 2 :(得分:1)

我强烈建议您 Bassistance jQuery Validation plugin

始终实施强大的服务器端验证。

答案 3 :(得分:1)

我只是将数据发布到一个通过ajax验证所有内容的php。然后我在json字符串中返回错误,每个错误都有输入失败的名称和错误字符串。使用jQuery我循环遍历json对象,并将输入读取并列出错误字符串。你可以让表单提交给这个脚本,这样如果关闭javascript,表单会被检查相同的php脚本。

function submitForm() {
$.ajax({
  type: 'post',
  url: 'cgi-bin/s_contact.php',
  data: $("#contact").serialize(),
  dataType: 'json',
  success: function(data) {
      if(data.answer == 'true') {
        $("#showErrors").removeClass("progressbar");
         $("#showErrors").html('<h2>Message Has Been Sent!</h2>');
         setTimeout(function() {
             window.location = $("#zsite").val(); 
         },2000);
      }
      else {
          se = $("#showErrors");
          se.removeClass("progressbar");
          se.html('');
          se.append('<ul id="showeror"></ul>');
          $.each(data,function(index,val) {
            $('input[name='+index+']').css('background-color','#ff9');
            $('#showeror').append('<li>'+val+'</li>');
          });
      }
  },
  error: function(msg) {
        alert('Error: '+msg.error); 
  }
});

}

答案 4 :(得分:1)

如果您使用一个好的javascript验证插件,您会发现它们在您的服务器端验证时非常便携。我可能需要进一步解释这个,所以请耐心等待一下。我会参考http://rickharrison.github.com/validate.js/来帮助我,但还有很多其他人。

就个人而言,我使用Symfony表单框架进行验证,但您可以使用其他框架或自己动手。重要的是,您只需定义一组验证规则,然后可以使用它来驱动客户端验证。

通过这种方式,两个单独的验证过程之间不会出现任何不一致,从而确保您的应用程序处于干燥状态。此外,您可以使用页面加载客户端验证,因为这些规则已在服务器端代码中预先定义,您不需要所有这些ajax请求。

如果您不熟悉任何PHP表单框架或我通过定义验证规则的意思,我可以使事情更清楚一些。

以下数组可用于在服务器端循环两个$ _POST字段,电子邮件和号码。此信息也可以轻松传递给客户端验证器(例如json_encode($ validators))。您可能需要稍微重做一些事情,具体取决于客户端期望其规则的格式。但更重要的是,您的验证逻辑存储在一个地方。

$validators = array(
   'email' => array(
       'rules' => array(
           'blank' => false,
           'invalid' => '/^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i',
       ),
       'messages' => array(
           'blank' => 'Missing email',
           'invalid' => 'Invalid email',
       ),
    ),
    'number' => array(
       'rules' => array(
           'blank' => false,
           'invalid' => '/\d/',
       ),
       'messages' => array(
           'blank' => 'Missing number',
           'invalid' => 'Not a number'
       ),
     ......

答案 5 :(得分:0)

始终使用服务器端脚本来检查输入,因为如果您使用客户端(javascript),那么任何人都可以通过使用各种技术(例如禁用javascript等)来使您变得愚蠢。