2011-08-24 96 views
2

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

这是可能的PHP?

回答

1

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

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

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

0

当你说你想要验证发生“当文本框失去焦点”,这意味着你的意图是做客户端验证。我极力阻止你这样做,因为客户端“任何事物”都不应该被信任。所有的验证都应该在服务器端完成。

现在,您可能希望使用一些jQuery来通过在浏览器中进行验证来增强表单的“用户体验”,但请不要误解,这仅用于展示。

下面的代码应该引领你在正确的方向

// $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. 
    } 

} 
0

你需要使用JavaScript/JQuery的实时验证。如果您必须使用PHP来验证输入,则可以使用AJAX调用来验证输入和返回的PHP脚本。下面是类似于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!"); 
     } 
    } 
}); 
+0

您的回答完全忽略了您无法单独依靠前端验证的事实。关掉JavaScript,你的解决方案就成了一块无用的代码。是的,用于前端验证的Javascript,但你只给出了一半的答案。 – bpeterson76

0

以下是关于验证的事情:客户端验证看起来不错,可以非常快地进行设置。这对用户更好,因为它可以“做更多”来指示问题(vs只是没有JavaScript的PHP)

但是,这是一个大,但它不是万无一失的。你关掉了Javascript,你的验证在水里死了。依赖于任何JavaScript或jQuery对您的数据输入不负责任......所以,您将不得不依靠混合解决方案 - 前端和后端。并且不要忘记数据消毒,要么......或者您最终会以little Bobby Tables作为您的网站用户之一。

我公司确实将表格作为其业务的核心部分。如果我要做自定义验证,我会发疯,把自己从屋顶上抛下。我为use this script节省时间....它是快速,有效,和万无一失,只需一行或两个代码,包括在课堂上的几个字,使其工作。再次,这只是双管齐下混合方法的前端部分。

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