重新显示表单并提供内联错误消息

问题
表单中输入的数据有问题时,希望在有问题的输入域旁边输出错误消息,而不是在表单最上面显示一个通用的错误消息。还希望保留用户在表单中输入的值,使他们不用再重新输入。
解决方案
验证时,将表单错误记录到一个数组中,以元素名为键。然后当显示表单时,在各个元素旁边输出适当的错误消息。为了保留用户输入,可以使用一个适用的HTML惯用法:大多数input元素使用一个value属性(使用实体编码),单选钮和复选框使用一个checked='checked'属性,下拉菜单中的option元素使用selected='selected'属性。示例9-22显示并验证一个表单,其中包含一个文本框、一个复选框和一个下拉菜单。
重新显示一个表单并提供错误消息和所保留的输入
//为下拉菜单建立一些选项
$flavors = array('Vanilla','Chocolate','Rhinoceros');
//未做任何选择时设置默认值为空。
$defaults = array('name' => '',
'age' => '',
'flavor' => array());
foreach($flavors as $flavor){
$defaults['flavor'][$flavor] = '';
}
if($_SERVER['REQUEST_METHOD'] == 'GET'){
$errors = array();
include DIR . "/show-form.php";
}else{
$errors = validate_form();
print $_POST['age'];
if(count($errors)){
if(isset($_POST['name'])){$defaults['name'] = $_POST['name'];}
if(isset($_POST['age'])){$defaults['age'] = "checked='checked'";}
foreach($flavors as $flavor){
if(isset($_POST['flavor']) && ($_POST['flavor'] == $flavor)){
$defaults['flavor'][$flavor] = "selected='selected'";
}
}
include DIR . "/show-form.php";

}else{
	print 'The form is submitted!';
}

}

function validate_form(){
global $flavors;

$errors = array();

if(!(isset($_POST['name']) && (strlen($_POST['name']) >3))){
	$errors['name'] = 'Enter a name of at least 3 letters';
}
if(isset($_POST['age']) && ($_POST['age'] != '1')){-----//感觉这里有逻辑问题
	$errors['age'] = 'Invalid age checkbox value.';
}
if(isset($_POST['flavor']) && (! in_array($_POST['flavor'], $flavors))){
	$errors['flavor'] = 'Choose a valid flavor.';
}
return $errors;

}

表单(show-form.php):

' method='post'>
Your Name:
'/>
Are you over 18 years old?
/> Yes
Your favorite ice cream flavor:
posted @   kksllss  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示