I have the following problem with my system:
Connects to the database, but does not enter the system. the user query returns the wrong user despite showing the same results that the database.
Conexion.php
<?php
$file = 'config.ini.php';
$config = parse_ini_file($file, true);
$host = $config['database']['host'];
$user = $config['database']['username'];
$pass = $config['database']['password'];
$schema = $config['database']['schema'];
$encode = $config['database']['encode'];
class conexion extends mysqli
{
public
function __construct($host, $user, $pass, $schema)
{
parent::__construct($host, $user, $pass, $schema);
if (mysqli_connect_error())
{
printf("Falló la conexión: %s\n", mysqli_connect_error());
}else
{
echo "conexión exitosa";
}
}
}
$conexion = new conexion($host, $user, $pass, $schema);
mysqli_set_charset( $conexion, $encode);
?>
Connect.php
<?php
session_start();
/* Verifico que CONECTAR tenga un valor, esto para validar que este activo javascript y que no entraron por ruta forzada */
$conectar =1;
if ($conectar == 1)
{
include '__conexion.php';
include_once 'funciones/passwordLib.php';
$usuario = $_POST['txtusuario'] ? : '';
echo "<br>"."usuario ingresado:".$usuario."<br>";
$contrasena = $_POST['txtcontrasena'] ? : '';
echo "<br>"."Contraseña ingresada:".$contrasena."<br>";
$statement = $conexion->prepare("SELECT hash,nivel_id,unidad_id FROM usuarios WHERE usuario=? LIMIT 1");
echo "var_dump de statement"."<br>";
var_dump($statement);
$statement->bind_param('s', $usuario);
$statement->execute();
$statement->store_result();
if ($statement->num_rows === 0)
{
$statement->close();
/* Si no existe el usuario en la BBDD le decimos que algo esta incorrecto */
echo ('<script>alert("Usuario o contrase\u00f1a incorrecto, vuelva a ingresar");</script>');
/* echo ("<script>window.location = 'index.php';</script>");*/
exit;
}
else
{
$statement->bind_result($contrasena_BD, $nivel_id, $unidad_id);
echo "Contraseña en la base de datos: <br>".$contrasena_BD;
echo "Nivel de acceso <br>".$nivel_id;
echo "Unidad del usuario <br>".$unidad_id;
while ($statement->fetch())
{
if (password_verify($_POST['txtcontrasena'], $contrasena_BD))
{
$_SESSION['nivel'] = $nivel_id;
$_SESSION['conectado'] = true; //esta conectado//
$_SESSION['usuario'] = $usuario;
$_SESSION['unidad'] = $unidad_id;
$_SESSION['inicio'] = time();
$_SESSION['expira'] = $_SESSION['inicio'] + (10 * 60); //TIEMPO DE SESIÓN//
if ($nivel_id == 0)
{
/* Mensaje de bienvenida segun la clase */
echo ('<script>alert("Bienvenido al Sistema Automatizado de OMD");</script>');
/* echo ("<script>window.location = 'menu_unidades.php';</script>");*/
}
elseif ($nivel_id == 1)
{
echo ('<script>alert("Bienvenido al Sistema Automatizado de OMD");</script>');
/* echo ("<script>window.location = 'menu_administradores.php';</script>"); */
}
elseif ($nivel_id > 1)
{
echo ('<script>alert("Este usuario no corresponde al sistema");</script>');
/* echo ("<script>window.location = 'index.php';</script>");*/
}
}
else
{
/* Mensaje cuando la contraseña no coincide */
echo ('<script>alert("Usuario o contrase\u00f1a incorrecto, vuelva a ingresar");</script>');
/*echo ("<script>window.location = 'index.php';</script>");*/
}
}
$statement->close();
}
}
else
{
/* Mensaje cuando quieren entrar por ruta forzada */
echo ('<script>alert("No tiene permisos suficientes para acceder a esta parte del sistema");</script>');
/* echo ("<script>window.location = 'index.php';</script>");*/
}
?>
Results of conecta.php
usuario ingresado:e1_1dinf
Contraseña ingresada:personalz1
var_dump de statement
object(mysqli_stmt)[2]
public 'affected_rows' => null
public 'insert_id' => null
public 'num_rows' => null
public 'param_count' => null
public 'field_count' => null
public 'errno' => null
public 'error' => null
public 'error_list' => null
public 'sqlstate' => null
public 'id' => null
Contraseña en la base de datos:
$2y$10$GUv4G8lxvy6eJ9q93UFyFuU8vqbOz1I9w2wvb48vnZZmtBoklrBK6Nivel de acceso
0Unidad del usuario
033100000000
EXAMPLE OF MINIMUM CODE :
Index.php
<?php
session_start();
?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<form id="index" name="index" method="POST" action="conectarse.php">
<input type="text" size="25" maxlength="50" name="txtusuario" id="txtusuario">
<input type="password" size="25" maxlength="20" name="txtcontrasena" id="txtcontrasena">
<input type="submit" name="entrar" id="entrar" value="Entrar" onclick="validarLOGIN();">
</body>
</form>
</html>
Connect.php
<?php
session_start();
include '__conexion.php';
include_once 'funciones/passwordLib.php';
$usuario = $_POST['txtusuario'] ? : '';
$contrasena = $_POST['txtcontrasena'] ? : '';
$statement = $conexion->prepare("SELECT hash,nivel_id,unidad_id FROM usuarios WHERE usuario=? LIMIT 1");
$statement->bind_param('s', $usuario);
$statement->execute();
$statement->store_result();
$statement->bind_result($contrasena_BD, $nivel_id, $unidad_id);
while ($statement->fetch())
{
if (password_verify($_POST['txtcontrasena'], $contrasena_BD))
{
$_SESSION['nivel'] = $nivel_id;
$_SESSION['conectado'] = true;
$_SESSION['usuario'] = $usuario;
$_SESSION['unidad'] = $unidad_id;
$_SESSION['inicio'] = time();
$_SESSION['expira'] = $_SESSION['inicio'] + (10 * 60);
}
else
{
echo "Usuario Incorrecto";
}
}
$statement->close();
}
?>
The system should then go to your menu, but it shows the passwords as incorrect, apparently it could be password_verify