【问题标题】:CodeIgniter - is_unique form validation rule not working rightCodeIgniter - is_unique 表单验证规则无法正常工作
【发布时间】:2017-08-07 00:25:02
【问题描述】:

我有一个表格我想提交到我的数据库。如果不使用 is_unique 验证规则,它会完美运行。当我尝试将其放入我的代码中时,我收到一条错误消息,指出我尝试使用它的每个字段都需要一个唯一值。问题是我正在将数据插入到我的数据库中,而我知道这些数据还没有。这是我的代码:

控制器:

function submit_register() {

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

        $this->form_validation->set_rules('first_name', 'First Name', 'required|max_length[30]|xss_clean');
        $this->form_validation->set_rules('last_name', 'Last Name', 'required|max_length[30]|xss_clean');
        $this->form_validation->set_rules('email', 'E-Mail', 'required|max_length[30]|valid_email|is_unique[users.email]|xss_clean');
        $this->form_validation->set_rules('username', 'Username', 'required|max_length[30]|is_unique[users.username]|xss_clean');
        $this->form_validation->set_rules('password', 'Password', 'required|max_length[30]|xss_clean');
        $this->form_validation->set_rules('password_confirmation', 'Password Confirmation', 'required|max_length[30]|matches[password]|xss_clean');

        if ($this->form_validation->run($this) == FALSE) {
                $this->register();
        }
        else {
                $data = array(
                'first_name' => $this->input->post('first_name'),
                'last_name' => $this->input->post('last_name'),
                'email' => $this->input->post('email'),
                'username' => $this->input->post('username'),
                'password' => $this->input->post('password'),
                );
                $this->load->model('mdl_users');
                $this->mdl_users->_register_user($data);
                redirect("http://localhost:8888");
        }
    }

型号:

function _register_user($data) {
        $salt = bin2hex(openssl_random_pseudo_bytes(22));
        $encrypted_password = md5($data['password'].''.$salt);

        $data = array(
            'first_name' => $data['first_name'],
            'last_name'  => $data['last_name'],
            'email'      => $data['email'],
            'username'   => $data['username'],
            'password'   => $encrypted_password,
            'salt'       => $salt,
            'user_level' => 'user',
            'created_at' => date('Y-m-d H:i:s'),
            'updated_at' => date('Y-m-d H:i:s')
        );

        $this->db->insert('users', $data);
        }

我在 CodeIgniter 手册中读到了这一点:

Note: This rule requires Query Builder to be enabled in order to work.

这是我想念的吗?如果是这样,我找不到有关如何执行此操作的答案。

【问题讨论】:

标签: php mysql forms codeigniter hmvc


【解决方案1】:

你错过了吗?

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

您可以使用它来检查 is_unique 是否有效。

<?php if(validation_errors()) echo validation_errors(); ?>

【讨论】:

  • 我将它添加到我的函数中,它说它无法加载库......但我已经在我的 autoload.php 文件中自动加载了它,所以这不应该是问题。跨度>
  • 我认为您应该将其放入自动加载中,因为您必须在整个应用程序中使用它。
  • 我已经自动加载并响应了验证错误。但是,如果这个值是唯一的,为什么这个过滤器不起作用呢?
  • 错误是否显示?如果没有,我认为你的 if 语句有问题。
  • 是的,它说我需要为每个应用了 is_unique 的字段设置一个唯一值,即使这些字段已经具有唯一值。
【解决方案2】:

Yachi 的回答很好,但是如果你想在控制器内部手动连接数据库,你必须使用这个:

$this->load->database();

这是错误的:$this->load->library('database');

【讨论】:

    猜你喜欢
    • 2012-11-18
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 2012-04-22
    相关资源
    最近更新 更多