【发布时间】:2011-08-24 19:07:39
【问题描述】:
我使用 HTML 和 PHP 设计了一个客户表单。但现在的问题是,要验证表单。我希望像 asp.net 页面那样进行验证:一旦文本框控件失去焦点,验证器就会显示状态。
在 php 中可以吗?
【问题讨论】:
标签: php javascript html forms validation
我使用 HTML 和 PHP 设计了一个客户表单。但现在的问题是,要验证表单。我希望像 asp.net 页面那样进行验证:一旦文本框控件失去焦点,验证器就会显示状态。
在 php 中可以吗?
【问题讨论】:
标签: php javascript html forms validation
不,如果没有 Javascript 支持,这是不可能的,即使 ASP.NET 也使用 Javascript 来帮助验证表单中的输入字段。
您正在查看 AJAX 解决方案,或 JS 验证客户端 + PHP 服务器端验证(总是需要进行客户端 + 服务器验证)。
但是不,没有用于客户端验证的纯 PHP,PHP 是服务器端。
【讨论】:
当您说您希望“当文本框失去焦点时”发生验证时,这意味着您的意图是进行客户端验证。我非常不鼓励你这样做,因为客户端“任何东西”都不应该被信任。所有验证都应在服务器端完成。
现在,您可能想使用一些 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.
}
}
【讨论】:
您需要使用 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!");
}
}
});
【讨论】:
这里是关于验证的事情:客户端验证看起来不错,并且可以非常快速地设置。这对用户来说更好,因为它可以“做更多”来指示问题(与没有 javascript 的 php 相比)
但是,这是一个很大的问题,但并非万无一失。你关闭了 Javascript,你的验证就泡汤了。依赖任何 javascript 或 jQuery 对您的数据输入是不负责任的......因此,您将不得不依赖混合解决方案 - 前端和后端。并且不要忘记对数据进行清理......否则您最终会以 little Bobby Tables 作为您的网站用户之一。
我的公司将表格作为其业务的核心部分。如果我要进行自定义验证,我会发疯并从屋顶上跳下来。我use this script 以节省时间....它快速、有效且万无一失,只需包含一两行代码和课堂上的几句话即可使其正常工作。同样,这只是双管齐下混合方法的前端部分。
在后端,当您提交时,您只需让您的函数在验证失败时返回问题输入,并返回给 UI,以便它可以抛出警告。在我的应用程序中,我在最初隐藏的表单顶部有一个集中的“问题”警报区域,它从 PHP 捕获所有后端验证问题并将它们显示在一个位置。我认为,如果他们花时间覆盖我的前端验证,那么他们就应该经历一个巨大的错误消息。
【讨论】: