Не возвращается желаемое сообщение об ошибке / успехе - PullRequest
0 голосов
/ 25 января 2012

По какой-то причине, когда я отправляю свою форму, она отправляется обратно: «При создании пользователя возникла проблема! Пожалуйста, попробуйте еще раз!» но он все еще делает новую запись в базе данных, и я не уверен, почему. Я запускаю тесты в своей форме, но с данными, которые я отправляю, это должно дать мне сообщение об успехе. Есть идеи?

РЕДАКТИРОВАТЬ: я пытался в течение 2 дней и до сих пор не могу понять это.

Контроллер:

function register_submit()
{
    $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean|min_length[6]|max_length[12]|alpha_numeric|strtolower');
    $this->form_validation->set_rules('email', 'Email', 'trim|required|xss_clean|valid_email');
    $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|min_length[6]|max_length[12]|alpha_numeric');
    $this->form_validation->set_rules('confirm_password', 'Confirm Password', 'trim|required|xss_clean|matches[password]|min_length[6]|max_length[12]|alpha_numeric');
    $this->form_validation->set_rules('first_name', 'First Name', 'trim|required|xss_clean|alpha');  
    $this->form_validation->set_rules('last_name', 'Last Name', 'trim|required|xss_clean|alpha');    

    if (!$this->form_validation->run()) 
    {
        echo json_encode(array('error' => 'yes', 'message' => 'There was a problem submitting the form! Please refresh the window and try again!'));    
    }
    else
    {                           
        $user_data = $this->kow_auth->create_user($this->input->post('username'), $this->input->post('email'), $this->input->post('password'), $this->input->post('first_name'), $this->input->post('last_name'));
        if ($user_data == FALSE)      
        {
            echo json_encode(array('error' => 'yes', 'message' => 'There was a problem creating the user! Please try again!'));
        }     
        else
        {
            $data['activation_period'] = 48;
            $this->kow_auth->send_email('activate', $data['email'], $data);
            unset($data['password']);   
            echo json_encode(array('sucess' => 'yes', 'message' => 'You have successfully registered. Check your email address to activate your account!'));
        }
    }
}

Библиотека:

/**
 * Create new user on the site and return some data about it:
 * user_id, username, password, email, new_email_key (if any).
 *
 * @param   string
 * @param   string
 * @param   string
 * @param   string
 * @param   string
 * @return  array
 */
function create_user($username, $email, $password, $first_name, $last_name)
{
    if ((strlen($username) > 0) AND !$this->ci->users->is_username_available($username)) 
    {
        return FALSE;
    } 
    elseif (!$this->ci->users->is_email_available($email)) 
    {
        return FALSE;
    } 
    else 
    {
        $genPassHash = $this->ci->genfunc->GenPassHash($password);

        $max_user_id = $this->ci->users->get_max_users_id();

        $data = array(
            'username'      => $username,
            'password'      => $genPassHash[0],
            'password2'     => $genPassHash[1],
            'email'         => $email,
            'first_name'    => $first_name,
            'last_name'     => $first_name,
            'new_email_key' => md5(rand().microtime()),
            'user_id'       => $max_user_id,
            'ip_address'    => $this->ci->input->ip_address()
        );

        if (($result = $this->ci->users->create_user($data)) == FALSE)
        {
            $data['user_id'] = $res['user_id'];
            $data['password'] = $password;
            unset($data['last_ip']);
            return $data;
        }
    }
    return FALSE;
}

Модель пользователя:

/**
 * Create new user record
 *
 * @param   array
 * @return  bool
 */
function create_user($data)
{
    $data['date_created'] = date('Y-m-d H:i:s');

    $this->db->set('username', $data['username']); 
    $this->db->set('password', $data['password']); 
    $this->db->set('password2', $data['password2']); 
    $this->db->set('email', $data['email']);
    $this->db->set('first_name', $data['first_name']);  
    $this->db->set('last_name', $data['last_name']); 
    $this->db->set('ip_address', $data['ip_address']); 
    $this->db->set('date_created', $data['date_created']); 

    $query = $this->db->insert('users');

    if ($query) 
    {
        return TRUE;
    }
    else
    {
        return FALSE;
    }
} 

1 Ответ

0 голосов
/ 25 января 2012

Я думаю, что в какой-то момент во всех этих вставках могут быть некоторые ошибки sql, а $ query - FALSE, вам следует читать о транзакциях, чтобы избежать этой частичной вставки ... в основном это логика.По сути, вы не хотите выполнять какие-либо вставки, если какая-либо из вставок в вашей логике потерпит неудачу, так что читайте транзакции.Вы не указали, какую платформу БД вы используете, поэтому я не могу дать точную ссылку ... если вы используете mysql, то есть ссылка: http://dev.mysql.com/doc/refman/5.0/en/ansi-diff-transactions.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...