0

ユーザーが既に存在する場合にユーザーを作成するときに、以下の codeigniter コードを使用しました。メッセージの重複値が表示されますが、1062 エラーが表示されます。Pls は問題を解決するのに役立ちます。

コントローラ

function create_member()
{
    $this->load->library('form_validation');

    // field name, error message, validation rules
    $this->form_validation->set_rules('first_name', 'Name', 'trim|required');
    $this->form_validation->set_rules('last_name', 'Last Name', 'trim|required');
    $this->form_validation->set_rules('email_address', 'Email Address', 'trim|required|valid_email');
    $this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[4]');
    $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[4]|max_length[32]');
    $this->form_validation->set_rules('password2', 'Password Confirmation', 'trim|required|matches[password]');


    if($this->form_validation->run() == FALSE)
    {
        $this->load->view('signup_form');
    }

    else
    {            
        $this->load->model('membership_model');

        if($query = $this->membership_model->create_member())
        {
            $data['main_content'] = 'signup_successful';
            $this->load->view('includes/template', $data);
        }
        else
        {
            $this->load->view('signup_form');            
        }
    }
}

モデル

function create_member()
{

    $new_member_insert_data = array(
        'first_name' => $this->input->post('first_name'),
        'last_name' => $this->input->post('last_name'),
        'email_address' => $this->input->post('email_address'),
        'username' => $this->input->post('username'),
        'password' => md5($this->input->post('password'))
    );

    $insert = $this->db->insert('membership', $new_member_insert_data);

    if ($this->db->_error_number() == 1062)
    {
        $this->session->set_flashdata('duplicate_email', 'Duplicate value');
        redirect('login');
    }

    return $insert;
}
4

3 に答える 3

1

データベースが同じユーザー名/電子メールで複数のエントリを追加することを許可していないため、エラーが発生したようです。このため、 その特定のフィールドにcodeigniter is_unique検証を追加する必要があります。

以下は、codeigniter の一意の検証の例です。$this->form_validation->set_rules('username', 'Username', 'required|min_length[5]|max_length[12]|is_unique[membership.username]');

于 2013-11-10T14:27:35.347 に答える
0

以前のクエリを実行して、電子メールがすでに存在するかどうかを確認してみませんか?

とにかく、次のようなことができます:

$query_string = $this->db->insert_string('users', $data);

$this->db->query($query_string.' ON DUPLICATE KEY UPDATE id=id');
// or 
$this->db->query(str_replace("INSERT INTO", "INSERT IGNORE INTO", $query_string));

if( $this->db->affected_rows() == 0 ) {
    //duplicate email
}
于 2013-11-10T14:32:34.437 に答える
0

挿入の代わりに $this->db->query を使用し、INSERT IGNORE を使用して SQL ステートメントを作成すると、重複をサイレントに処理できます。

于 2013-11-10T13:02:01.337 に答える