Как я могу добавить число к значению, если уже существует в CodeIgniter - PullRequest
0 голосов
/ 30 июня 2018

Таким образом, в моей регистрационной форме у меня есть уникальный ввод, но если более двух пользователей хотели бы создать точное имя пользователя, я бы хотел, чтобы у второго имени пользователя было число после введенного значения.

Например, у нас есть два пользователя:

имя пользователя 1: кодовый любовник

имя пользователя 2: codelover2 и т. Д.

В настоящее время у меня есть это в моем контроллере:

    // Create Page Data Array
        $data = array(
            'first_name' => strip_tags($this->input->post('first_name')),
            'last_name'  => strip_tags($this->input->post('last_name')),
            'email'      => strip_tags($this->input->post('email')),
            //'username'   => strip_tags($this->input->post('username')),
            'ip_address' => $this->input->ip_address(),
            'genre'      => $this->input->post('genre'),
            'slug'       => $slug,
            'status'    =>  'active',
            /* 1-Founder, 2-Administrator, 3-Editor, 4-Author , 5-Contributor , 6-Subscriber , 7-Banned, 8-Suspended */
            'role'       => 'Subscriber',
            'password'   => strip_tags(password_hash($this->input->post('password'), PASSWORD_DEFAULT)),
            'password2'  => strip_tags(password_hash($this->input->post('password2'), PASSWORD_DEFAULT)),
        );
// Is this the right approach of doing this?
            $i = 0;
            while($this->input->post('username') != 0){
$i++;
                $data['username'] = strip_tags($this->input->post('username'.'.'.$i));
            }
            //Check if username and/or email already exist.
            $existent_username = $this->User_model->existent_username($this->input->post('username'));
            $existent_email = $this->User_model->existent_email($this->input->post('email'));

            if (!empty($existent_username) || ($existent_email)) {
                // Create Message
                $this->session->set_flashdata('error', 'Username and/or Email already exist. Try again.');              

                // Redirect to pages
                redirect('users/register');
            } else {
                // Add User
                $this->User_model->add($data);

и это в моей модели, которая проверяет, существует ли уже имя пользователя:

public function existent_username($username) {
    $query = $this->db->get_where($this->table, array('username' => $username));
    return $query->row_array();
}

Это то, что я пытаюсь сделать, но в CodeIgniter:

if(empty($existent_username)){
                    $query = mysqli_query($con, "SELECT username FROM users WHERE username = '$username'");

                    $i = 0;
                    // If username already exists, add number to username
                    while(mysqli_num_rows($query) != 0){
                        $i++;
                        $username = $username ."." . $i;
                        $query = mysqli_query($con, "SELECT username FROM users WHERE username = '$username'");
                    }
                }

Вот и все, спасибо заранее.

1 Ответ

0 голосов
/ 30 июня 2018

Прежде всего

// Is this the right approach of doing this?
$i = 0;
while($this->input->post('username') != 0) {
    $i++;
    $data['username'] = strip_tags($this->input->post('username'.'.'.$i));
}

Это неправильно, мне кажется, что вы выполняете бесконечный цикл здесь. Я даже не понял, зачем тебе это нужно. Если вы, пользователи, можете указать несколько имен пользователей, сначала получите значение для полей ввода, а затем выполните цикл.

Теперь о главном вопросе, Вы должны получить все существующие имена пользователей, которые частично совпадают с предоставленным именем пользователя. затем сгенерируйте имя пользователя и проверьте, что имя пользователя уже существует или нет. Если нет, то это имя пользователя. как это.

$username = $this->input->post('username');
$existent_username = $this->User_model->existent_username($username));
if (!empty($existent_username)) {
    $partially_matched_usernames = $this->db->select('username')->like('username', $username, 'after')->from('users')->get()->result_array();
    $usernames_array = array_column($partially_matched_usernames, 'username');

    // now generate the username
    $i = 1;
    while(true) {
        if( ! in_array($username.$i, $usernames_array)) {
            $username = $username.$i;
            break;
        }
        $i++;
    }
    echo $username;
}

Я не запускал этот код, поэтому может быть любая ошибка. Я думаю, вы сможете исправить это самостоятельно. так счастлив кодировать ...

...