0
votes

Message: Propriété non définie: CI_DB_mysqli_result :: $ num_row

Je reçois un message d'erreur: Propriété non définie: CI_DB_mysqli_result::$num_row

mon contrôleur est

<?php
?>
<html>
    <head>
        <title>Login Account</title>
    </head>
    <body>
        <div>
            <form method="post"  method="post" name="login" action="<?php echo base_url(''); ?>Login/login">
                  <h2>Login Form</h2>
                  <div >
                      <label for="username" >Uername: </label>
                      <input style="margin-left:2px" type="text" value="" name="username" placeholder="User Name" id="username" required="" />
                </div>
                  </br>
                <div>
                    <label for="username" >password: </label>
                    <input type="password" value="" name="password" placeholder="Password" id="password" required="" />
                </div>
                  </br>
                  <div>
                    <input type="button" id="btnLogin" value="Login">
                </div>
            </form>
        </div>
    </body>
</html>

et mon modèle est p>

<?php
class Login_mod extends CI_Model {

    function __construct() {
        parent::__construct();
        $this->load->database();
    }

    function validate($username,$password) {
       // $username = $this->input->post('username');
      //  $password = $this->input->post('password');
        $this->db->where('username', $username);
        $this->db->where('pass', $password);
        $query = $this->db->get('user');
        if ($query->num_row == 1) {
            return TRUE;
        } else {
            return FALSE;
        }
    }
}

et mon point de vue est

<?php
class Login extends CI_Controller {

    function __construct() {
        parent::__construct();
        $this->load->database();
        $this->load->model('Login_mod');
    }
    function login() {
        $username = $this->input->post('username');
        $password = $this->input->post('password');

        $result = $this->Login_mod->validate($username,$password);
        if (!$result) {
            $msg = "<font color=red> Invalid Username or Password.</font></br>";
            $data['msg'] = $msg;
            $this->load->view('login/Login', $data);
        } else {
            $this->load->view('login/index');    
        }
    }
}

Une erreur PHP a été rencontrée Gravité: avis

Message: Propriété non définie: CI_DB_mysqli_result :: $ num_row

Nom de fichier: models / Login_mod.php

Numéro de ligne: 27

Backtrace:

Fichier: C: \ xampp \ htdocs \ ov400 \ application \ models \ Login_mod.php Ligne: 27 Fonction: _error_handler

Fichier: C: \ xampp \ htdocs \ ov400 \ application \ controllers \ Login.php Ligne: 23 Fonction: valider

Fichier: C: \ xampp \ htdocs \ ov400 \ index.php Ligne: 315 Fonction: require_once


6 commentaires

c'est $ query-> num_rows ()


ça ne fonctionne pas


Quelle est la nouvelle erreur


Erreur fatale: appel à la méthode non définie CI_DB_MYSQLI_RESULT :: num_row () dans c: \ xampp \ htdocs \ ov400 \ application \ modèles \ login_mod.php à la ligne 27


Vous n'avez pas tout changé. Ce n'est pas num_row () , c'est num_rows ()


cela fonctionne mais n'a pas redirigé vers ma page d'index


4 Réponses :


0
votes

utilisez cette requête:

function validate($username,$password) {
 return $this->db->where('username', $username)->where('pass', $password)->get('user')->row_array();
}


0 commentaires

1
votes

Juste une erreur de syntaxe. L'instruction correcte pour la clause if dans le modèle serait

return ($query->num_rows() == 1) ? true : false;

Et, si vous souhaitez compacter ce code en une seule ligne en utilisant un opérateur ternaire , vous pouvez utiliser:

if ($query->num_rows() == 1) {
  return TRUE;
} else {
  return FALSE;
}

ce qui précède produirait le même résultat, avec un code beaucoup plus propre


0 commentaires

1
votes

Ce n'est pas $ query-> num_row (); c'est $query->num_rows();

Changez votre validate en ceci:

function validate($username,$password) {
        $this->db->where('username', $username);
        $this->db->where('pass', $password);
        $query = $this->db->get('user');
        if ($query->num_rows == 1) {
            return TRUE;
        } else {
            return FALSE;
        }
    }


0 commentaires

1
votes

Modifier votre fonction de validation

 function validate($username,$password) {
 $this->db->where(['username'=> $username, 'pass'=> $password]);
 $query = $this->db->get('user');
 $num = $query->num_rows();
 if($num){
   return true;
 } else{
   return false;
 }
}


0 commentaires