CodeIgniter form_error返回错误消息,set_value在第一页加载时不返回任何内容

时间:2014-03-31 19:04:09

标签: php codeigniter

使用CodeIgniter的表单验证类时,视图中的form_errors始终显示错误消息。此外,使用set_value方法永远不会使用正确的值填充该字段,除非没有对其进行验证。

我已经扩展了form_validation类,但只是为了添加我需要的新方法并完全删除代码并没有什么区别。

我的控制器的代码是:

function test() {
    $data['title'] = 'My title';
    $this->form_validation->set_rules('title', 'Title', 'trim|required');
    if($this->form_validation->run() == FALSE) {
        $this->load->view('form', $data);
    } else {
        $this->load->view('form', $data);
    }
}

我的观点代码是:

echo form_open(current_url()).
     form_error('title').
     form_label('Title', 'title').
     form_input(array('name' => 'title', 'id' => 'title'), set_value('title', $title)).
     form_label('Other', 'other').
     form_input(array('name' => 'other', 'id' => 'other'), set_value('other', 'test')).
     form_submit('submit', 'Update').
     form_close();

我的期望是没有显示错误消息,第一个输入字段会显示文本'我的标题'并且第二个字段将包含文本'其他'。如果我提交了表单,那么他们会显示已发布的值。

实际上,我总是会收到一条错误消息,指出第一个字段是必填字段,第一个字段在页面加载时始终为空,第二个字段正确填充文本'其他'。 / p>

如果我填写两个/任一字段并发布表单,则会返回包含发布数据的字段,这是正确的。我看不出我做错了什么,感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

仔细检查文件中的代码

/system/libraries/form_validation.php

第77行应

if (count($_POST) == 0)

而不是

if (!isset($_POST))

答案 1 :(得分:0)

请遵循此代码,希望对您有所帮助。 控制器

function test()
     {
         $this->load->library('form_validation');       
            $data['title1'] = 'My title';
            $this->form_validation->set_rules('title', 'Title', 'trim|required');
            if($this->form_validation->run() == FALSE) {
                $this->load->view('form', $data);
            } else {
                $this->load->view('form', $data);
            }
    }

和表格

<?php 
echo form_open('CONTROLLERNAME/test').
     form_error('title').
     form_label('Title', 'title').
     form_input(array('name' => 'title', 'id' => 'title'), set_value('title', $title1)).
     form_label('Other', 'other').
     form_input(array('name' => 'other', 'id' => 'other'), set_value('other', 'test')).
     form_submit('submit', 'Update').
     form_close();
?>

在这里您传递视图中的标题数据,字段名称也是标题,因此每次表单标题字段打印值。