在CodeIgniter上,如何仅使用正确的值重新填充表单?

时间:2011-12-29 17:21:48

标签: forms validation codeigniter codeigniter-2 repopulation

想象一下这样的表格:

<form action="test.php" method="post">
    <input type="text" name="firstname" value="<?=set_value('firstname')?>" />
    <input type="text" name="lastname" value="<?=set_value('lastname')?>" />
    <input type="text" name="email" value="<?=set_value('email')?>" />
    <input type="submit" name="submit_form" value="OK" />
</form>

如果我提交了错误的电子邮件,CodeIgniter函数将写入“该字段无效”并使用错误的值填充无效字段。

我想保留错误消息但不是错误的值(我更喜欢有空值)。但我也希望保持重新填充功能以获得正确的值。

这是我得到的:

http://nsa21.casimages.com/img/2011/12/29//111229060041170572.jpg

这就是我想要的:

enter image description here

[编辑]解决方案(感谢Herr Kaleun和Matt Moore)

电子邮件字段示例:

<input type="text" name="email" id="email" value="<?=!form_error('email')?set_value('email'):''?>" />

2 个答案:

答案 0 :(得分:1)

您可以单独检查字段并具有这样的逻辑。

如果存在特定字段的错误,您可以在其上构建逻辑。

if ( form_error('email') != '' )
{
    $data['email_value'] = '';
}
else
{
    $data['email_value'] = set_value('email');
}

<form action="test.php" method="post">
    <input type="text" name="firstname" value="<?=set_value('firstname')?>" />
    <input type="text" name="lastname" value="<?=set_value('lastname')?>" />
    <input type="text" name="email" value="<?= $email_value; ?>" />
    <input type="submit" name="submit_form" value="OK" />
</form>

答案 1 :(得分:1)

当表单值基于验证错误输出时,将设置Form_error。通过使用set_value函数来判断,我假设您正在使用内置表单验证。您可以检查该字段的消息是否设置为if(form_error('fieldname') !=NULL),并根据该值设置值。

您可能必须为每个字段设置错误消息,无论如何您都应该这样做。以下是涵盖该指南的指南:http://codeigniter.com/user_guide/libraries/form_validation.html#repopulatingform

<form action="test.php" method="post"> 
    <input type="text" name="firstname" value="<?if(form_error('firstname') != NULL){echo set_value('firstname');}?>" /> 
    <input type="text" name="lastname" value="<?if(form_error('lastname') != NULL){ echo set_value('lastname');}?>" /> 
    <input type="text" name="email" value="<?if(form_error('email') !=NULL){ echo set_value('email');}?>" /> 
    <input type="submit" name="submit_form" value="OK" /> 
</form> 

* 注意此代码未经过测试*