Codeigniter表单验证...形式重新填充

时间:2009-07-13 17:27:34

标签: php validation codeigniter

我正在特定记录页面上创建输入表单,例如(属性/出租/·REC_ID)。提交时,应插入,验证数据并返回到发送数据的原始页面以及任何相关消息。

  • 如果验证失败,请重新加载表单页面以重新填充表单
  • 回应特定的验证错误 - 例如无效的电子邮件地址等

  • 如果成功,请插入数据,重新加载页面并显示成功消息。

    function class(){

    $this->load->library('form_validation');    
    $this->form_validation->set_rules('name','name','required|trim');
    $this->form_validation->set_rules('email','email','required|trim|valid_email');
    
    $fields['name'] = 'Name';
    $fields['email'] = 'Email Address';
    
    $this->validation->set_fields($fields);
    
    if ($this->form_validation->run() == FALSE) 
    {
        //failed - reload page and re-populate fields with any error messages
    }
    else
    {
         // display form with success message
    }
    

    }

通常,这只需通过“加载视图”并传递相关数据来重新填充页面,字段或显示消息来完成。但我必须使用“重定向”回到产品特定页面。除了使用会话数据来传递验证错误之外,还有什么好办法吗?

先谢谢,迈克尔

5 个答案:

答案 0 :(得分:7)

您可以使用set_value('field_name')功能重新填充表单。视图中的示例用法:

  

<input type="text name="name" value="<?php echo set_value('name'); ?>" />"

要显示form_validation中的错误,您可以使用validation_errors()功能。视图中的示例用法:

  

<?php echo validation_errors(); ?>

另请参阅link text了解详情。

答案 1 :(得分:3)

查看Sessions上的CodeIgniter手册,看看'FlashData'是否有用。

答案 2 :(得分:1)

   $insertData=array(
            'name'=>NULL,
            'email'=>NULL);
 //setting validation rules
    $this->form_validation->set_rules('name', 'Name', 'required');
    $this->form_validation->set_rules('email', 'Email', 'required|email');

//here you will get all data which user entered in form 
$insertData = $this->input->post(NULL, TRUE);

if ($this->form_validation->run() == FALSE) 
{
    //failed - reload page and re-populate fields with any error messages
    $this->load->view('view_name',$insertData)    

}
else
{
     //set flash data for displaying success message in redirected page
     $this->session->set_flashdata('success','Success message')
     redirect('controller_name');

}

查看页面

<?php if ($this->session->flashdata('succes_message')) { echo    $this->session->flashdata('succes_message'); ?> } ?>

<form action='action page url' method='post'>
<input type='text' name='name' value='<?php echo $name ?>'/>
<input type='text' name='email' value='<?php echo $email ?>'/>
<input type='submit' value='Save'/>

答案 3 :(得分:0)

会话数据是将数据发送回表单的最简单,最准确/最有效的方式。您也可以使用cookie,但它不太安全(因为cookie数据随每个http请求一起发送)。

您的另一个选择是将详细信息存储在数据库中,并在重定向后再次获取它们,但我觉得这会为您的应用程序添加不必要的复杂性。

对于一个非常简单的解决方案,您甚至可以将POST / GET数据转储到SESSION变量中,然后在重定向到的页面上快速调用它,几乎可以重定向从逻辑的角度看是透明的。

session_start();
$_SESSION['POST_DATA'] = $_POST;

答案 4 :(得分:-4)

为了缓解这个问题,您可以使用Javascript / jQuery进行客户端验证。因此,基本上,不是立即转到新页面,而是将提交操作重定向到您的javascript函数,这将决定表单是否有效。然后你可以使用jQuery来使无效元素看起来很漂亮。