1
votes

Comment vérifier la base de données pour les résultats correspondants dans CI?

Je veux pouvoir sélectionner les données correspondantes dans ma base de données, pour ensuite décider du code à exécuter, en particulier, je ne veux pas que les utilisateurs puissent s'inscrire deux fois avec le même nom d'utilisateur.

Je ' J'ai essayé ce que vous essayez normalement, en affichant les informations dans le contrôleur et en les transmettant au modèle pour qu'elles soient comptées. Ensuite, j'ai essayé ce que j'ai vu beaucoup de gens utiliser, le 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();
}

Ce que j'attends, c'est que le modèle vérifier si l'utilisateur existe sur la base des informations transmises par le contrôleur, et si tel est le cas, renvoyer une erreur. Sinon, continuez à insérer comme d'habitude.

L'erreur que j'obtiens est:

Appel à une fonction membre num_rows () sur un tableau


0 commentaires

3 Réponses :


2
votes

Vous mélangez les choses

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

votre variable $ query contient tout l'objet de résultat. C'est donc $ query qui détient -> result () , -> num_rows () , etc.

En attribuant $ result avec $ query-> result () vous affectez le tableau d'objets que vous avez obtenu de la base de données, mais pas les méthodes d'assistance (telles que num_rows ( ) qui vivent toujours dans $query)

Cela dit, une approche beaucoup plus simple pour éviter les noms d'utilisateurs en double consiste à utiliser la méthode form_validation de cette façon:

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

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

puis exécutez la validation du formulaire dans le contrôleur et vous n'aurez pas besoin de gérer l'unicité vous-même


1 commentaires

Ensuite, il dit Colonne inconnue 'register-username' dans 'where clause' register-username est le nom du champ ou le nom de l'entrée.



0
votes

Remplacez votre modèle par celui-ci.

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

vous pouvez avoir un moyen plus simple et cela a déjà été mentionné par @Javier Larroulet. en utilisant le formulaire de validation is_unique .

il suffit de charger ces assistants et bibliothèques:

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

alors vous êtes prêt à partir.


0 commentaires

0
votes

Tout d'abord, vérifiez le nombre de lignes dans la base de données avec le nom d'utilisateur spécifique

Modèle

$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...
}

Controller strong>

Basé sur le résultat de la fonction usercheck faites ce que vous voulez

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


0 commentaires