【问题标题】:Codeigniter Form Validation...form re-populationCodeigniter 表单验证...表单重新填充
【发布时间】:2010-11-10 09:23:23
【问题描述】:

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

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

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

    函数类() {

    $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
    }
    

    }

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

提前致谢,迈克尔

【问题讨论】:

    标签: php validation codeigniter


    【解决方案1】:

    您可以使用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 了解更多信息。

    【讨论】:

    • 我认为这实际上是最 CI 的方式,但出于某种原因,包括我在内的每个人最终总是使用会话方法。
    • IMO,使用会话方法最终会导致代码混乱。
    【解决方案2】:

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

    【讨论】:

    【解决方案3】:
       $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'/>
    

    【讨论】:

      【解决方案4】:

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

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

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

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

      【讨论】:

      • 嗯,我就是这么想的。这仍然是一个相当复杂的方法,但可能是最简单的解决方案。如果可以通过重定向传递数组会很方便...谢谢 tj111
      【解决方案5】:

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

      【讨论】:

      • 这个问题是客户端验证很容易被绕过。您应该始终在服务器上验证数据,即使您在客户端上预先验证它。永远不要相信你无法控制的数据。
      猜你喜欢
      • 2012-07-12
      • 1970-01-01
      • 2010-12-30
      • 2013-03-17
      • 2012-05-05
      • 1970-01-01
      • 1970-01-01
      • 2011-02-13
      • 1970-01-01
      相关资源
      最近更新 更多