0

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

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

我的库文件夹中 MY_Form_validation.php 中的规则。首先加载库。正如我所说,我的所有其他验证都可以正常工作,例如我的 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?');
    }

没有任何消息会设置,所以我感觉没有任何东西可以验证!

4

3 回答 3

3

set_rules()函数接受 3 个参数

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

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

$this->form_validation->set_rules('region', 'Region', 'required|valid_region');
于 2012-12-14T02:36:38.723 回答
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验证成功时使用

于 2012-12-14T02:32:50.493 回答
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;
}
于 2012-12-14T04:55:27.407 回答