Как проверить базу данных на соответствие результатов в CI? - PullRequest
1 голос
/ 23 мая 2019

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

Я попробовал то, что вы обычно пытаетесь, разместив информацию в контроллере и передав ее в модель для подсчета. Затем я попробовал то, что, как я видел, используют многие люди, num_rows();.

controller.php


$userchecker = $_POST['register-username'];
$this->load->model('User_exists');
$this->User_exists->usercheck($userchecker);

            if ($usercheck > 0) {

              echo '<p style="color: orange;">A user with this username already exists!</p>';
              exit();

            }

            else {

//Insert user

model.php


public function usercheck($userchecker) {

$this->db->where('ci_useruid', $userchecker);
$query = $this->db->get('users');

$result = $query->result();
$usercheck = $result->num_rows();
}

Что я ожидаю, так это то, что модель проверит, существует ли пользователь на основе информации, передаваемой из контроллера, и, если это так, выдаст ошибку. В противном случае, продолжайте вставлять как обычно.

Я получаю ошибку:

Вызов функции-члена num_rows () для массива

Ответы [ 3 ]

2 голосов
/ 24 мая 2019

Вы путаете вещи

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

$result = $query->result();
$usercheck = $result->num_rows();

Ваша $query переменная содержит весь объект результата. Таким образом, $query имеет ->result(), ->num_rows() и т. Д.

Назначая $result с помощью $query->result(), вы назначаете массив объектов, полученных из базы данных, но не вспомогательные методы (например, num_rows(), которые все еще находятся в $query)

Тем не менее, гораздо более простой способ избежать дублирования имен пользователей заключается в использовании метода form_validation следующим образом:

$this->form_validation->set_rules('field_name', 'Field description', 'required|is_unique[tablename.fieldname]');

затем запустите проверку формы в контроллере, и вам не нужно будет обрабатывать уникальность самостоятельно

0 голосов
/ 24 мая 2019

Сначала проверьте, сколько строк в БД с указанным именем пользователя

Модель

public function usercheck($userchecker) {
    return $this->db->get_where('ci_useruid', ['ci_useruid' => $userchecker])->num_rows();
}

Контроллер

На основе результата функции usercheck делай что хочешь

$userchecker = $_POST['register-username'];
$this->load->model('User_exists');
$rows = $this->User_exists->usercheck($userchecker);

if ($rows > 0) {
    echo '<p style="color: orange;">A user with this username already exists!</p>';
    exit();
}else {
   //Coding...
}
0 голосов
/ 24 мая 2019

Измените свою модель на эту.

$this->db->where('ci_useruid', $userchecker);
$query = $this->db->get('users');
$usercheck = $query->num_rows();

у вас может быть более простой способ, и об этом уже упоминал @Javier Larroulet.используя форму проверки is_unique.

просто загрузите эти помощник и библиотеку:

$this->load->helper(array('form', 'url'));
$this->load->library('form_validation');

, тогда вы готовы к работе.

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