Hola,
Hace mucho tiempo que no programaba (y estoy recuperando códigos hechos con mysql, que debo pasar a mysqli.
También veo que la cifrado md5 ya no es la más segura y estoy intentando pasar a un hash diferente.
La cuestión es en el archivo que yo llamaba validar.php
Utilizaba la expresión
Y ahora quisiera en ese código utilizar
$pw_enc =password_hash
($pw, PASSWORD_DEFAULT
, array("cost"=>12));
Pero tal y como está parece que ya no valdría el código (sé que hay que transformarlo a mysqli pero me refiero a que por lo que leo habría que añadir en algún punto un password_verify para que cotejara que son el mismo, ¿cómo podría hacerse esto? ¿es necesario el password verify? Y si es así, me podríais ayudar a saber dónde?
validar.php
<?php
//conectar BD
include("conectar_bd.php");
conectar_bd();
$usr = $_POST['usuario'];
$pw = $_POST['password'];
//Obtengo la version cifrada del password
$result=$conexio->query("SELECT id_usuario FROM tbl_users
INNER JOIN ctg_tiposusuario
ON tbl_users.id_TipoUsuario = ctg_tiposusuario.id_TipoUsuario
WHERE tx_username = '".$usr."'
AND tx_password = '".$pw_enc."' ");
$uid = "";
//Si existe al menos una fila
if( $fila=$result->fetch_array(MYSQLI_ASSOC))
{
//Obtener el Id del usuario en la BD
$uid = $fila['id_usuario'];
//Iniciar una sesion de PHP
//Crear una variable para indicar que se ha autenticado
$_SESSION['autenticado'] = 'SI';
//Crear una variable para guardar el ID del usuario para tenerlo siempre disponible
$_SESSION['uid'] = $uid;
//CODIGO DE SESION
//Crear un formulario para redireccionar al usuario y enviar oculto su Id
?>
<form name="formulario" method="post" action="principalcero.php">
<input type="hidden" name="idUsr" value='<?php echo $uid ?>' />
</form>
<?php
}
else {
//En caso de que no exista una fila...
//..Crear un formulario para redireccionar al usuario a la pagina de login
//enviandole un codigo de error
?>
<form name="formulario" method="post" action="index.php">
<input type="hidden" name="msg_error" value="1">
</form>
<?php
}
?>
<script type="text/javascript">
//Redireccionar con el formulario creado
document.formulario.submit();
</script>
Sé que se os revuelve el estómago con el código, que es además un refrito de otros, pero si me pudiérais ayudar sería genial.
Millones de gracias.
Buenas, veo varias cosas que se pueden mejorar en tu código:
1. Siempre que quieras redirigir a una determinada pagina puedes usar la función 'header' de php para mandar determinadas cabeceras, en este caso concreto puedes usar la cabecera 'Location' seguida del fichero a donde lo quieras redirigir.Por ejemplo:
header('Location: index.php');'
2. Y por ultimo para acceder a los datos del array '$_SESSION' en vez de pasárselo en formularios con parámetros ocultos solo debes poner 'session_start()' en todos los ficheros php que vas a necesitar tales datos, de esta forma podrás acceder a los datos del array sin problema.
Por ejemplo, en el index.php puedes poner session_start() al inicio del fichero y acceder al uid del usuario de forma normal, $_SESSION['uid']
3.Con lo que preguntas de comprobar las contraseñas es cifrar la contraseña que ha metido el usuario en el formulario y comprobar si su hash correspondiente es valido con el hash de la contraseña en la base de datos.
<?php
$hash = password_hash
($pw, PASSWORD_DEFAULT
, array("cost"=>12)); $isOk = password_verify($passUserBD, $hash);
Al código te faltaría meterle mas consultas sql pero te he ordenado lo de redirigir a los usuarios.
<?php
//conectar BD
include("conectar_bd.php");
conectar_bd();
$usr = $_POST['usuario'];
$pw = $_POST['password'];
//Obtengo la version cifrada del password
$pw_enc =password_hash
($pw, PASSWORD_DEFAULT
, array("cost"=>12));
$result=$conexio->query("SELECT id_usuario FROM tbl_users
INNER JOIN ctg_tiposusuario
ON tbl_users.id_TipoUsuario = ctg_tiposusuario.id_TipoUsuario
WHERE tx_username = '".$usr."'
AND tx_password = '".$pw_enc."' ");
$uid = "";
//Si existe al menos una fila
if( $fila=$result->fetch_array(MYSQLI_ASSOC))
{
//Obtener el Id del usuario en la BD
$uid = $fila['id_usuario'];
//Iniciar una sesion de PHP
//Crear una variable para indicar que se ha autenticado
$_SESSION['autenticado'] = 'SI';
//Crear una variable para guardar el ID del usuario para tenerlo siempre disponible
$_SESSION['uid'] = $uid;
//CODIGO DE SESION
header('Location: principalcero.php'); }
else
{
//En caso de que no exista una fila...
header('Location: index.php'); }
Un saludo