Codeigniter表单验证 - 如何在成功后取消设置表单值?

Bry*_*ynJ 32 php forms validation codeigniter

我意识到这个请求违反了CI文档中提供的示例(建议单独的'成功'页面视图),但我希望在成功提交表单后重新使用给定的表单视图 - 显示成功消息然后显示空白表格.我尝试了几种方法未成功清除验证设置值(取消设置$_POST,将规则/字段设置为空数组并重新运行验证).

我可以重定向到同一页面,但是我必须设置一个会话变量来显示成功消息 - 这是一个混乱的方法.

任何想法如何最好地实现上述目标?

Tee*_*eej 36

重定向到自己.这样,没有提交任何提交...这也为您提供了一种显示flash_data的方法.

    $this->load->library('form_validation');

    $this->form_validation->set_rules('firstname', 'First Name', 'required');
    $this->form_validation->set_rules('surname', 'Sur Name', 'required');

    if ($this->form_validation->run() === TRUE)
    {
                    // save data

        $this->session->set_flashdata('message', 'New Contact has been added');
        redirect(current_url());
    }

    $this->load->view('contacts/add', $this->data);
Run Code Online (Sandbox Code Playgroud)

  • 一直在寻找这个并认为这是唯一的方法......虽然我讨厌在会话中存储成功/错误消息. (3认同)

小智 12

另一个解决方案,扩展库CI_Form_validation.该属性$_field_data受到保护,因此我们可以访问它:

class MY_Form_validation extends CI_Form_validation {

    public function __construct()
    {
        parent::__construct();
    }

    public function clear_field_data() {

        $this->_field_data = array();
        return $this;
    }
}
Run Code Online (Sandbox Code Playgroud)

并调用新方法.这样,您可以在不在会话中存储数据的情况下传递数据.

    class Item extends Controller
    {
        function Item()
        {
            parent::Controller();
        }

        function add()
        {
            $this->load->library('form_validation');
            $this->form_validation->set_rules('name', 'name', 'required');

            $success = false;

            if ($this->form_validation->run())
            {
                $success = true;
                $this->form_validation->clear_field_data();
            }

            $this->load->view('item/add', array('success' => $success));
        }
    }
Run Code Online (Sandbox Code Playgroud)

  • 我认为这个比选择的答案要好得多,因为它在CI的范围内工作.它的扩展Form_validation库的方式也非常可扩展,非常OOP. (2认同)

bsc*_*fer 7

将TRUE/FALSE变量传递给有条件地设置表单值的视图.

控制器

if($this->form_validation->run())
{
    $data['reset'] = TRUE;
}
else
{
    $data['reset'] = FALSE:
}

$this->load->view("form", $data);
Run Code Online (Sandbox Code Playgroud)

风景:

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

<input type="text" name="first_name" value="<?php echo ($reset) ? "" : set_value('first_name'); ?>" />
Run Code Online (Sandbox Code Playgroud)