重新显示表单并提供内联错误消息
问题
表单中输入的数据有问题时,希望在有问题的输入域旁边输出错误消息,而不是在表单最上面显示一个通用的错误消息。还希望保留用户在表单中输入的值,使他们不用再重新输入。
解决方案
验证时,将表单错误记录到一个数组中,以元素名为键。然后当显示表单时,在各个元素旁边输出适当的错误消息。为了保留用户输入,可以使用一个适用的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):
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战