2

我正在使用 codeigniter 的一个站点。我不是使用框架的专家。在这里我必须检查数据库中是否已经存在电子邮件。我已经编写了所需的功能,但是在提交表单时出现错误。在控制器中,我制定了以下规则。

我的代码是:

$this->form_validation->set_rules(
    'email', 'Email', 'trim|required|valid_email|is_unique|callback_isEmailExist'
);
public function isEmailExist($email) {
    $this->load->library('form_validation');
    $this->load->model('user');
    $is_exist = $this->user->isEmailExist($email);

    if ($is_exist) {
        $this->form_validation->set_message(
            'isEmailExist', 'Email address is already exist.'
        );    
        return false;
    } else {
        return true;
    }
}

在模型用户中,功能是:

function isEmailExist($email) {
    $this->db->select('id');
    $this->db->where('email', $email);
    $query = $this->db->get('users');

    if ($query->num_rows() > 0) {
        return true;
    } else {
        return false;
    }
}

当我提交表单时,我收到以下错误。

遇到 PHP 错误

严重性:通知

消息:未定义的偏移量:1

文件名:库/Form_validation.php

行号:953

发生数据库错误

错误号:1064

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的 'WHERE ` = 'muraddnw@gmail.com' LIMIT 1' 附近使用正确的语法

选择 * WHERE ` = 'muraddnw@gmail.com' 限制 1

文件名:C:\xampp\htdocs\aunction\system\database\DB_driver.php

行号:330 请任何人帮助我。提前致谢。

4

8 回答 8

2

您的问题出在 set_rules 行中。在这里,您同时使用is_unique和 一个callback函数。你必须使用其中的任何一个。如果使用call_back函数检查重复数据;不需要使用 is_unique。For this wrong you get that error只需is_unique从那里删除。

$this->form_validation->set_rules('email','Email','trim|required|valid_email|callback_isEmailExist'); // removed is_unique

试试这个,让我知道。

于 2013-08-29T04:02:19.107 回答
2
$this->form_validation->set_rules('username', 'userName', 'required|callback_exists_username');


#uniqueness of username
    function exists_username($str)
    {
        $record_id = $this->input->post('record_id');
        $condition = array('user_id !='=>$record_id,'username'=>$str);
        $value =GetAllRecord('user_master',$condition,$is_single=true);
        if (count($value) == 0)
        {
            return TRUE;
        }
        else
        {
            $this->form_validation->set_message('exists_username', 'username already exists!');
            return FALSE;
        }
    }
于 2013-08-30T05:05:08.777 回答
2

只需将is_unique[tablename.fieldname]规则添加到表单验证。例如:

 array('field' => 'email', 'label' => 'Email', 'rules' => 'trim|required|valid_email|is_unique[users.email]'));
于 2016-06-21T10:50:26.973 回答
0

Use is_unique[table.field] add table name and field.

$this->form_validation->set_rules(
    'email', 'Email', 'trim|required|valid_email|is_unique[table.field]|callback_isEmailExist'
);
于 2013-08-29T07:06:46.853 回答
0

不需要做一个特殊的功能,这就足够了

$this->form_validation->set_rules(
    'email', 'Email', 'trim|required|valid_email|is_unique'
);
于 2013-08-29T07:02:41.413 回答
0

您可以使用 form_validator 函数检查字段是否唯一is_unique[table_name.field_name]

于 2015-04-01T10:54:40.710 回答
0

您在 mysql 查询中有错误:-

SELECT * WHERE ` = 'muraddnw@gmail.com' LIMIT 1

您的代码尚未指定要从哪个表查询。所以使用以下内容: -

$this->db->select('id');
$this->db->from('tablename');
$this->db->where('email', $email);

希望这可以帮助。

于 2013-08-29T05:22:58.510 回答
0

你的模型就像

$this->db->select('id');
$this->db->where('email', $email);

请告诉mysql您要从哪个表中获取记录。

$this->db->from('tablename');

就像

$this->db->select('id');
$this->db->from('tablename');
$this->db->where('email', $email);
于 2013-08-29T05:17:12.380 回答