Friends I try to make a user access control, I used to have it in PHP5
and it worked fine, but I had a hard time trying to update it to PHP 7
, it has given me a lot of headaches and I would like to see if any of You with more experience can support me to find the error in my code, since it gives me a
error: mysqli_num_rows () expects parameter 1 to be mysqli_result, null given in C: \ xampp \ htdocs \ system \ classes \ DB_mysql.php on line 62
I have read a lot on the subject but I still can not find the error, besides that in many forums they comment that a certain practice that I have in the code allows injection, then I just hit the code waiting for someone to support me since I walk a bit -Updated in code:
<?php
/*Clase para la conexion a la base de datos*/
class DB_mysql{
//variable de conexion
var $BaseDatos;
var $Servidor;
var $Usuario;
var $Clave;
//identificador de conexion y consulta
var $Conexion_ID=0;
var $Consulta_ID=0;
//numero de error y texto de error
var $Errno=0;
var $Error="";
//Constructor
function DB_mysql($db="dbejemplo",$host="localhost",$user="entsis",$pass="entsis"){
$this->BaseDatos=$db;
$this->Servidor=$host;
$this->Usuario=$user;
$this->Clave=$pass;
}
//Conexon a la base de datos
function Conectar($db,$host,$user,$pass){
if($db!="") $this->BaseDatos=$db;
if($host="") $this->Servidor=$host;
if($user!="") $this->Usuario=$user;
if($pass!="") $this->Clave=$pass;
//Conectamos al servidor
$this->Conexion_ID=mysqli_connect($this->Servidor,$this->Usuario,$this->Clave);
if(!$this->Conexion_ID){
$this->Error="Ha fallado la conexion";
return 0;
}
//Seleccionamos la base de datos
if(!@mysqli_select_db($this->BaseDatos,$this->Conexion_ID)){
$this->Error="Imposible abrir ".$this->BaseDatos;
return 0;
}
//Si hemos tenido exito al conectarnos devuelve el id de la conexion sino devuelve 0
return $this->Conexion_ID;
}
//Ejecuta una consulta
function Consulta($sql=""){
if($sql==""){
$this->Error="No ha especificado una consulta";
return 0;
}
//Ejecutamos la consulta
$this->Consulta_ID=@mysqli_query($sql,$this->Conexion_ID);
if(!$this->Consulta_ID){
$this->Errno=mysqli_connect_errno();
$this->Error=mysqli_connect_errno();
}
//Si hemos tenido exito en la consulta devolvemos el id de la conexion
return $this->Conexion_ID;
}
//Devuelve el numero de registros de la consulta
function NumRegistros(){
return mysqli_num_rows($this->Consulta_ID);
}
//Devuelve el nombre de un campo de una consulta
function NombreCampo($numcampo){
return mysqli_fetch_field_direct($this->Consulta_ID,$numcampo);
}
//Liberar la consulta
function FreeConsulta(){
mysqli_free_result($this->Consulta_ID);
}
}
?>
HERE THE CLASS
<?php
class classLogin{
function LoginUser($user,$password){
$idusuario;
$db=new DB_mysql();
$db->Conectar(NAME_DB,SERVER_DB,USER_DB,PASSWORD_DB);
// 'idusuario, usuario, password, nombre
$SQL="SELECT idusuario FROM usuarios WHERE usuario='".$user."' AND password='".$password."' AND borrado=0 LIMIT 1";
$db->Consulta($SQL);
$valida=$db->NumRegistros();
if($valida){
$Dato=mysqli_fetch_array($db->Consulta_ID);
$idusuario=$Dato['idusuario'];
session_cache_expire(500);
$_SESSION["estatus"]="autorizado";
$_SESSION["IDUser"] =$idusuario;
header("Location: index1.php");
}else return "Su nombre y/o contraseña son incorrectos para el sistema. Verificar de nuevo.";
}//fin LoginUser
function LoginOut(){
if(isset($_SESSION['estatus'])) {
unset($_SESSION['estatus']);
unset($_SESSION['IDUser']);
if(isset($_COOKIE[session_name()]))
setcookie(session_name(), '', time() - 1000);
session_destroy();
}
}
function ConfirmaLogin(){
if(isset($_SESSION["estatus"])!="autorizado"){
header("Location: login.php");
}
}
}
?>