Codeigniter - 模型 - 重复录入警报

时间:2014-01-15 14:00:09

标签: php mysql codeigniter

制作了一个简单的订阅表单提交电子邮件和城市唯一的电子邮件ID我设置唯一但如果电子邮件ID已经在数据库中它显示错误我需要在这里添加警报如果已经在数据库中的数据警告用户但不显示像此

  

发生数据库错误

     

错误号码:1062

     

为密钥2重复输入'abc @ abc'

     

INSERT INTO usersemailcity)VALUES('abdullah @ gaya.com',   '吉达')

     

文件名:   /home/content/f/a/h/fahadghafoor/html/fahad/models/users_model.php

     

行号:12

模型文件user_model.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    class Users_model extends CI_Model
    {


    function create_member()
    {
            $new_member_insert_data = array(
                'email' => $this->input->post('email'),
                'city' => $this->input->post('city'),                           
            );
            $insert = $this->db->insert('users', $new_member_insert_data);
            return $insert;


    }//create_member
}

控制器文件user.php

<?php 

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class User extends CI_Controller {

    function __construct() {
        parent::__construct();
        $this->load->helper('form');
        $this->load->helper('url');
        $this->load->library('user_agent');
        $this->load->library('form_validation');
    }

    public function create_user() {
        // field name, error message, validation rules
        $this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email');
        $this->form_validation->set_rules('city', 'City', 'trim|required');
        if ($this->form_validation->run() == FALSE) {
            if ($this->input->post("lang") == "en") {
                if ($this->agent->is_mobile()) {
                    $this->load->view('m_english_signup');
                } else {
                    $this->load->view('d_english_signup');
                }
            } //if ($this->agent->is_mobile())
            else {
                if ($this->agent->is_mobile()) {
                    $this->load->view('m_arabic_signup');
                } else {
                    $this->load->view('d_arabic_signup');
                }
            }
        } else {
            $this->load->model('Users_model');
            if ($query = $this->Users_model->create_member()) {
                if ($this->input->post("lang") == "en") {
                    if ($this->agent->is_mobile()) {
                        $this->load->view('m_english_thanks');
                    } else {
                        $this->load->view('d_english_thanks');
                    }
                } else {
                    if ($this->agent->is_mobile()) {
                        $this->load->view('m_arabic_thanks');
                    } else {
                        $this->load->view('d_arabic_thanks');
                    }
                }
            }
        }
    }

}

3 个答案:

答案 0 :(得分:13)

这很简单......只需改变

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

使用is_unique规则

$this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email|is_unique[TABLENAME.COLUMNNAME]');

TABLENAME - 您的表名 COLUMNNAME - 您的相关列名,其中包含Email.Ex:-email

答案 1 :(得分:4)

在./application/config/database.php中设置$ db ['default'] ['db_debug'] = FALSE;

然后尝试捕获Users_model中的错误号。

$insert = $this->db->insert('users', $new_member_insert_data);
if (!$insert && $this->db->_error_number()==1062) {
   //some logics here, you may create some string here to alert user
} else {
   //other logics here
}

答案 2 :(得分:1)

您需要添加自定义表单验证。 CI documentation解释了如何做到这一点。

回调将需要检查电子邮件是否已经在数据库中并返回true或false(或者相反,相反,因为如果电子邮件有效,回调必须返回true,而不是在数据库中)。

希望有所帮助。