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
3 Réponses :
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
Ensuite, il dit Colonne inconnue 'register-username' dans 'where clause'
où register-username
est le nom du champ ou le nom de l'entrée.
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.
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(); }