用PHP会话实现:客户表单输入验证
时间:2007-06-27 来源:windlike
今天看 《PHP & MySQL Web 数据库应用开发指南》,感觉在第八章用“PHP会话实现:客户表单输入验证”思想很好。于是,就将主要代码段记了下来。
表单验证程序功能描述:
客户填写表单,填写完毕后提交页面,服务器验证客户填写的表单数据。(如果验证通过,客户将继续下一步操作; 如果验证不能通过,则发送错误消息给用户,让客户修改表单并重新提交。)
以下开始书中的片段:
改善错误消息
验证脚本检查从客户提交的每个变量。根据字段的目的以不同的严格程度来检查每个字段。通过注册一个关联数组来保存与每个字段关联的错误消息。这样允许错误显示时有更大的灵活性。
首先,我们需要初试化一个会话并注册一个变量来保存一组错误。这通过添加以下代码行到脚本的开头来实现。
// 初试化一个会话
session_start();
// 注册一个错误数组---以防万一
if(!session_is_registered("errors")){
session_register("errors");
}
// 清除任何可能已经发现的错误
$errors = array();
因为可能在一个会话中调用几次验证脚本,因此需要将以前的记录的所有错误清除掉。这也是设置$errors值为新的空数组的原因。
脚本检查每个变理并在遇到错误时将错误消息添加到关联数组$errors中。错误消息按所检查的字段的名称索引。例如,姓(surname)的验证编码为:
// 验证姓 (Surname)
if(empty($formVars["surname"])){
// 用户的姓不能为空字符串
$errors["surname"] = "The surname field cannot be blank.";
}
验证完所有字段后,你可以测试数组$errors的大小来确定是否遇到了错误。数组中只要有错误,你就需要显示它们。
// 现在脚本已经完成了验证,
// 检查是否有错误
if(count($errors)){
// 有错误。重新定位回客户表单
header("Location: input.php");
exit;
}
保存最后输入的值作为会话变量
我们现在开发脚本将字段数据从验证脚本传递回客户输入,以避免有错误发生时的重新输入。通过将用户输入的数据保存在另一个会话变量(关联数组$formVars)来修改脚本。
// 以下代码(紧跟在$errors注册为会话变量之后插入)注册数组$formVars,然后在每个用户输入的变量之间循环,在按变量名称索引的数组中设置一个值。
// 利用POST变量设置一个$formVars数组
// 并利用会话注册
if(!session_is_registered("formVars")){
session_register("formVars");
}
foreach($HTTP_POST_VARS as $varname => $value){
$fromVars[$varname] = trim(clean($value,50));
}
显示错误消息
要显示保存在验证脚本的会话变量$errors中的错误,则需要进行更改。我们添加了函数fieldError()来帮助在字段之上显示错误消息。该函数有两个参数:$errors和$fieldName,前者是错误消息的关联数组,后者是数组中的索引。
function fieldError($fieldName, $errors)
{
if(isset($errors[$fieldName])){
echo "$errors[$fieldName]";
}
}
该函数测试已有索引的错误消息是否存在,如果存在,输出一个适当格式的错误消息。当当显示每个元素时,将会调用fieldError()函数,以下是针对first-Name和surname字段的代码:
First Name:
" size="50">
表单验证程序功能描述:
客户填写表单,填写完毕后提交页面,服务器验证客户填写的表单数据。(如果验证通过,客户将继续下一步操作; 如果验证不能通过,则发送错误消息给用户,让客户修改表单并重新提交。)
以下开始书中的片段:
改善错误消息
验证脚本检查从客户提交的每个变量。根据字段的目的以不同的严格程度来检查每个字段。通过注册一个关联数组来保存与每个字段关联的错误消息。这样允许错误显示时有更大的灵活性。
首先,我们需要初试化一个会话并注册一个变量来保存一组错误。这通过添加以下代码行到脚本的开头来实现。
// 初试化一个会话
session_start();
// 注册一个错误数组---以防万一
if(!session_is_registered("errors")){
session_register("errors");
}
// 清除任何可能已经发现的错误
$errors = array();
因为可能在一个会话中调用几次验证脚本,因此需要将以前的记录的所有错误清除掉。这也是设置$errors值为新的空数组的原因。
脚本检查每个变理并在遇到错误时将错误消息添加到关联数组$errors中。错误消息按所检查的字段的名称索引。例如,姓(surname)的验证编码为:
// 验证姓 (Surname)
if(empty($formVars["surname"])){
// 用户的姓不能为空字符串
$errors["surname"] = "The surname field cannot be blank.";
}
验证完所有字段后,你可以测试数组$errors的大小来确定是否遇到了错误。数组中只要有错误,你就需要显示它们。
// 现在脚本已经完成了验证,
// 检查是否有错误
if(count($errors)){
// 有错误。重新定位回客户表单
header("Location: input.php");
exit;
}
保存最后输入的值作为会话变量
我们现在开发脚本将字段数据从验证脚本传递回客户输入,以避免有错误发生时的重新输入。通过将用户输入的数据保存在另一个会话变量(关联数组$formVars)来修改脚本。
// 以下代码(紧跟在$errors注册为会话变量之后插入)注册数组$formVars,然后在每个用户输入的变量之间循环,在按变量名称索引的数组中设置一个值。
// 利用POST变量设置一个$formVars数组
// 并利用会话注册
if(!session_is_registered("formVars")){
session_register("formVars");
}
foreach($HTTP_POST_VARS as $varname => $value){
$fromVars[$varname] = trim(clean($value,50));
}
显示错误消息
要显示保存在验证脚本的会话变量$errors中的错误,则需要进行更改。我们添加了函数fieldError()来帮助在字段之上显示错误消息。该函数有两个参数:$errors和$fieldName,前者是错误消息的关联数组,后者是数组中的索引。
function fieldError($fieldName, $errors)
{
if(isset($errors[$fieldName])){
echo "$errors[$fieldName]";
}
}
该函数测试已有索引的错误消息是否存在,如果存在,输出一个适当格式的错误消息。当当显示每个元素时,将会调用fieldError()函数,以下是针对first-Name和surname字段的代码:
First Name:
" size="50">
相关阅读 更多 +
排行榜 更多 +