Web con autentificación

Estoy haciendo una página web con php y mysql a la que se accede por autentificación. Sin embargo, al acceder no me valida la contraseña y por más que miro el código no encuentro el error.
El código es el siguiente:
<html>
<body>
<form action ="control.php" method="POST">
<table align="center" width="300" cellspacing="2" cellpadding="2" border="0">
<tr> <td colspan="2" align="center"
<?if ($_GET["errorusuario"]=="si")
{?> bgcolor=red><span
style="color:ffffff"><b>Datos incorrectos</b></span>
<?}else{?>
bgcolor=#cccccc>INTRODUZCA SU CONTRASEÑA<?}?>
</td></tr>
<tr><td align="right">
Usuario:<input type="Text" name="usuario" size="8" maxlength="50">
</td>
<td>
Password:<input type="password" name="contrasena" size="8" maxlength="50">
</td> </tr>
<tr><td colspan="2" align="center">
<input type="Submit" value="ENTRAR">
</td></tr>
</table>
</form>
</body>
</html>
Donde control.php es el archivo que se encarga de autentificar la contraseña. Se trata de un bucle if else en el que si la contraseña es válida ejecuta la primera parte del código y la segunda si no lo es. Pero a mí siempre se me ejecuta la segunda parte, meta la contraseña que meta. El código es:
<?
include("config.php");
$sql= "SELECT * FROM usuario WHERE nombre_usuario=´$usuario´and clave_usuario=´$contrasena´";
$consulta = mysql_query($sql,$con);
if(mysql_num_rows($consulta)!=0){
session_start();
session_register("autentificado");
$autentificado="si";
header("Location:pral.html");
}else{
header("Location:error.html?errorusuario=si");
}
mysql_free_result($consulta);
mysql_close($con);
?>
Siendo el archivo config.php el que conecta con la base de datos. El código es:
<?php
$bd_host="localhost";
$bd_usuario="root";
$bd_password="";
$bd_base="test";
$con=mysql_connect($bd_host,$bd_usuario,$bd_password);
mysql_select_db($bd_base,$con);
?>
Lo que yo dudo es si el problema me viene del php o del mysql porque me bajé un paquete que contenía apache/php/mysql ya configurado (appserv 4) pero al abrir phpmyadmin me aparecen dos mensajes:
La directiva $cfg[`PmaAbsoluteUri`]debe constar en elfichero de configuración
La opción de trabajar con tablas vinculadas está desactivada.
Espero que puedas ayudarme porque yo ya no se qué es lo que tengo que hacer.

1 respuesta

Respuesta
1
¿Has comprobado en control.php el valor de las variables del formulario? Usa echo $usuario para ver ese valor. Te recomiendo que uses lo siguiente en tu script:
$usuario = $_POST['usuario'];
$contrasena = $_POST['contrasena'];
$sql= "SELECT * FROM usuario WHERE nombre_usuario='$usuario'and clave_usuario='$contrasena'";
Comprueba las comillas simples que has puesto dentro del SELECT. Yo en tu código las veo como ´ en vez de '. Tienen que ser el carácter de comilla simple, no el acento.
En el siguiente if usa la condición mayor (>) en vez de distinto. Si no hay error y se ha encontrado devolverá un número mayor que cero:
if(mysql_num_rows($consulta)>0){
Y por último, aunque supongo que tu código es solo de ejemplo, en el header no redirecciones a una página html porque no te serviría de nada pedir contraseña. Solo con páginas php puedes continuar con la sesión creada. En cada página tienes que comprobar si el usuario tiene permiso, es decir, si $autenticado="si", y si no lo es vuelves a la página que pide la contraseña. Supongo que esto ya lo tenias pensado, pero por si acaso :-D
Una vez que el usuario se valida correctamente tienes el siguiente código:
session_start();
session_register("autentificado");
$autentificado="si";
header("Location:pral.html");
Tienes que redirigir a una página php en vez de una html con:
header("Location:pral.php");
Y ahora en pra1.php tienes que continuar la sesión poniendo al principio un código parecido al siguiente:
<?php
session_start();
if ($autentificado != "si") {
header("Location:error.html?errorusuario=si"); }
?>
Lo que haces aquí es comprobar si la variable que creaste de sesión tiene el valor "si" indicando que el usuario se ha validado correctamente. En caso contrario redirige a la página error.html que será la del formulario que pide el nombre de usuario y contraseña. Este código tienes que ponerlo en todas las páginas que no quieras que accedan sin pasar antes por la validación de usuario.
Hola de nuevo! Muchas gracias por contestarme, ahora sí que me funciona ;-)
Una cosita más, es referente a lo que me contabas de comprobar si el usuario está auntetificado cada página, ¿cómo puedo hacerlo? Es que no me lo había planteado, pero sí que es verdad que si se saltan la página de autentificación pueden acceder a las demás sin ningún problema.
Saludos
Hola de nuevo! Perdona que te dé tanto la lata, pero estoy muy verde!
Es que mi página web esta compuesta por una página principal (pral.php) y enlaces a otras páginas, entonces estas páginas no me interesa que las vean si no están autentificados porque si no no serviría para nada la contraseña, con lo cual tienen que llevar todas este código que tu dices, ¿no? ¿Y dónde lo coloco? ¿Después de body?
Lo último, ¿sería conveniente que al salir de la página se finalizará la sesión?
Muchas gracias de nuevo
Saludos
Sí, como bien dices, tienes que colocar ese código en cada página que no quieras que vean sin haber puesto antes una contraseña válida. Pero colócalo al principio del todo, antes de <html>. Y no dejes ningún espacio ni linea en blanco antes. Si colocas ese código, todas tus páginas tienen que ser .php y no .html.
La sesión finaliza trnscurrido un tiempo, cuando cierras el navegador o cuando pasas a una página que no continúe la sesión. Pero también la puedes cerrar tú. Tienes que poner un enlace o botón que al pulsarle ejecute el siguiente código:
<?php
session_start();
$autentificado = "no";
session_destroy();
header("Location:error.html?errorusuario=no");
?>

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas