表格验证 - 标准解决方案?

时间:2013-06-30 15:41:01

标签: php forms validation

我比网络编程的新手要高一点,我对表单验证知之甚少。在我的研究中,似乎有多种方法可以验证表单数据,而某些方法取决于您要对数据执行的操作。然后你必须被弃用的函数,如mysql_real_escape_string和一些名为“PDO”的东西,整个过程非常简单。

那么,有一组基本上是验证表单数据的标准方法的函数是否合理/可行?像这样......

function validate_for_sql()
function validate_for_email()
function validate_for_browser()

也许应该有更多(整数的东西?)。理想情况是sql注入和其他恶意事件都可以通过一组由编码社区开发的普遍接受和坚如磐石的函数来处理。

这可行吗?它是否已经存在于某个地方......也许在一个隐藏的巢穴中?如果是这样,有人可以通过电子邮件向我发送访问此信息所需的密码吗? :)

3 个答案:

答案 0 :(得分:1)

让我总结一下你的问题:“是否合理/可行有一套功能,通常被接受,统一和可靠,基本上是验证表格数据的标准方法?”

如果我总结的是真的,那么答案是:jQuery Validation。正如名称所述,您需要jQuery和jQuery Validation来实现这一目标。

以下是有关如何使用此工具的示例。

HTML:

<form id="myForm">
    <input type="text" name="currency">
    <input type="text" name="amount">
</form>

使用Javascript:

$("#myForm").validate({
    rules: {
        "currency": {
            minlength: 3,
            required: true
        },
        "amount": {
            number: true
        }
    }
});

默认情况下,会在KeyUp 上触发验证。因此,当用户更改,比方说,字段货币并违反上述规则之一时,jQuery Validation将自动提供预构建通知消息。

这些是上述规则的预构建消息:

  1. minlength:请输入至少三个字符
  2. 必填:此字段是必填项
  3. 号码:请输入有效号码

  4. 如果您想验证我们的汇率表中是否有货币,该怎么办?

    答案是:只需添加自定义验证方法。

    $.validator.addMethod("checkCurrency", 
        function(value, element) {
            var result = false;
            $.ajax({
                type:"GET",
                async: false,
                url: "012_ajax.php", // script to validate in server side
                data: {currency: value},
                success: function(data) {
                    result = (data == "1") ? true : false;
                }
            });
            // return true if currency is exist in database
            return result; 
        }, 
        "Currency is not exist."
    );
    
    $("#myForm").validate({
        rules: {
            "currency": {
                minlength: 3,
                required: true,
                checkCurrency: true
            },
            "amount": {
                number: true
            }
        }
    });
    

    使用此代码,每次用户输入表中的未使用货币时,表单将始终显示“货币不存在”消息。


    上一个问题:我可以为此插件创建自定义消息吗?

    答案是肯定的。

    $("#myForm").validate({
        rules: {
            "currency": {
                minlength: 3,
                required: true,
                checkCurrency: true
            },
            "amount": {
                number: true
            }
        },
        messages: {
            "currency": {
                minlength: "Currency should at least 3 char or more",
                required: "Currency is required"
            },
            "amount": {
                number: "Amount must be number"
            }
        }
    });
    

    现在,每当用户违反上述规则时,表单将在上面的代码中将消息显示为状态。

    这个插件的重要之处在于,每个表单验证应该做的是,只要数据未经过验证,就不会提交数据。好吧,只要用户不从他的浏览器关闭/禁用javascript。 :)


    更新

    上面的答案是客户端验证。

    对于服务器端验证,Internet上有PHP表单验证脚本,其中包括:

    1. http://html-form-guide.com
    2. A Soares
    3. 他们有内置验证规则,用户可以添加自定义验证规则。

      希望这有帮助。

答案 1 :(得分:0)

如果我理解你的问题,那么可以通过将类似输入的值作为参数传递给函数来实现。我敢肯定,如果你在网上搜索,你会发现一些可以做到这一点的预制功能。但是,他们不需要花那么长时间,而且创造它们会提高你的技能。有这样的东西会很好,事实上,ASP.NET确实有内置验证,但我担心PHP不会(据我所知)。

答案 2 :(得分:0)

你从根本上误解了这一点。

转义字符串的要点是允许您将其插入结构化字符串中而不会破坏结构(例如,SQL注入,XSS等)。

每当您将字符串插入某个结构时,您需要为该结构转义它,以便生成的字符串有意义。

如果你为不同的结构转义它(例如,HTML-escape一个字符串并将它放在一个SQL语句中),你将引入一个安全漏洞和一个bug。