使用PHP动态验证HTML表单

时间:2011-08-24 19:07:39

标签: php javascript html forms validation

我使用HTML和PHP设计了一个客户表单。但现在的问题是,验证表格。我希望验证像asp.net页面那样:只要文本框控件失去焦点,验证器就会显示状态。

这可能在PHP吗?

4 个答案:

答案 0 :(得分:1)

如果没有Javascript支持,这是不可能的,即使ASP.NET使用Javascript来帮助验证表单中的输入字段。

您正在寻找AJAX解决方案,或JS验证客户端+ PHP服务器端验证(始终需要进行客户端+服务器验证)。

但不,没有用于客户端验证的纯PHP,PHP是服务器端。

答案 1 :(得分:0)

当您说您希望验证发生时“当文本框失去焦点时”意味着您的意图是进行客户端验证。我强烈建议不要这样做,因为客户端“任何事情”都不应该被信任。所有验证都应该在服务器端完成。

现在,您可能希望使用一些jquery来通过在浏览器中进行验证来增强表单的“用户体验”,但不要搞错,这仅适用于show。

以下代码应引导您朝着正确的方向前进

// $clean_post: Assumes you already sanitized for SQL injection attack vectors and
// that you have already ensured proper character encoding.

// Example is for a hypothetical first name
if( empty( $clean_post[ 'first_name' ] ) )
{
    // Do something to let the user know that first name is required
}
else
{
    // They entered a first name, this is good. Now check for
    // invalid characters. We will allow A-Z , backtick, apostrophe, space and dash
    if( preg_match( "/[^a-zA-Z `'\-]/" , $clean_post[ 'first_name' ] ) )
    {
        // Do something because they have illegal characters.
    }

}

答案 2 :(得分:0)

您需要使用Javascript / JQuery进行实时验证。如果必须使用PHP来验证输入,则可以使用对验证输入和返回的PHP脚本的AJAX调用。下面是类似于AJAX调用的内容,它从输入框中获取值并将其传递给PHP脚本。如果PHP脚本打印“传递”,那么一切都很好,但如果没有,那么它会删除该值并提醒用户。

$.ajax({
    type:'post',
    data:'value='+$('#inputFieldID').val();
    url:'path-to-validate-script.php',
    success:function(msg){
        if (msg != "passed") {
            $('#inputFieldID').val('');
            alert("Invalid Input!");
        }
    }
});

答案 3 :(得分:0)

以下是有关验证的内容:客户端验证看起来不错,可以非常快速地进行设置。这对用户来说更好,因为它可以“做更多”来表示问题(仅针对没有javascript的php)

但是,这是一个很大的但是,它不是万无一失的。你关闭Javascript,你的验证已经死了。依赖于任何javascript或jQuery对您的数据输入都是不负责任的....因此,您将不得不依赖混合解决方案 - 前端和后端。并且不要忘记数据清理......或者您最终会以little Bobby Tables作为您的网站用户之一。

我的公司将表格作为其业务的核心部分。如果我要进行自定义验证,我会发疯并把自己扔掉屋顶。我use this script节省时间....它快速,有效,万无一失,只需要一行或两行代码以及类中的几个单词来使其工作。同样,这只是双管齐下混合方法的前端部分。

在后端,当你提交时,你必须让你的函数返回问题输入,如果验证失败并指示回UI,以便它可以发出警告。在我的应用程序中,我在最初隐藏的表单顶部有一个集中的“问题”警报区域,可以捕获PHP中的所有后端验证问题,并将它们显示在一个位置。如果他们花时间覆盖我的前端验证,他们应该不得不趟过一个巨大的错误信息,我想。