CodeIgniter num_rows()不起作用?

时间:2012-12-14 02:21:00

标签: php codeigniter

好的,我不知道什么不起作用。我知道我的表单验证肯定是有效的,因为我的所有其他功能都正常工作,但是我设置的消息是真的还是假的,并且没有一个出现所以我觉得它正在跳过验证规则...这很奇怪..

$this->form_validation->set_rules('region', 'required|valid_region');

我的库文件夹中的MY_Form_validation.php中的规则。首先加载库IS。正如我所说的所有其他验证工作正常,例如我的reCaptcha和所有内容。

function valid_region($str) {
        $this->load->database();
        if($this->db->query('SELECT id
                FROM region
                WHERE name = ?
                LIMIT 1', array($str))->num_rows() == 0) {
            //not a valid region name
            $this->set_message('valid_region', 'The %s field does not have a valid value!');
            return false;
        }

        $this->set_message('valid_region', 'Why is it validating?');
    }

没有任何消息会被设置,所以我感觉没有什么是验证的!

3 个答案:

答案 0 :(得分:3)

set_rules()函数需要3个参数

  
      
  1. 字段名称 - 您为表单字段指定的确切名称。
  2.   
  3. 此字段的“人”名称,将插入错误消息中。   例如,如果您的字段被命名为“user”,您可能会给它一个人   “用户名”的名称。注意:如果您想要字段名称   存储在语言文件中,请参阅翻译字段名称。
  4.   
  5. 此表单字段的验证规则。
  6.   

您将验证规则作为第二个参数。这就是验证没有运行的原因。试试这个:

$this->form_validation->set_rules('region', 'Region', 'required|valid_region');

答案 1 :(得分:2)

而不是

$this->form_validation->set_rules('region', 'required|valid_region');

尝试

$this->form_validation->set_rules('region', 'required|callback_valid_region');

使用自定义验证规则时,您应该使用

回调以预先添加功能名称。

更新

并使用

$this->form_validation->set_message

而不是

$this->set_message

并在function valid_region

验证成功时

使用return true

答案 2 :(得分:0)

$this->form_validation->set_rules('region', 'Region', 'required|valid_region');

function valid_region() {
    $str = $this->input->post('name_of_input');
    $this->load->database();
    if($this->db->query('SELECT id
            FROM region
            WHERE name = ?
            LIMIT 1', array($str))->num_rows() == 0) { // why compare "=" between `name` field and array() ?
        //not a valid region name
        $this->form_validation->set_message('valid_region', 'The %s field does not have a valid value!');
        return false;
    }

    $this->form_validation->set_message('valid_region', 'Why is it validating?');
    return true;
}