Problema de autentificación!

Bueno mi problema es el siguiente... Recojo datos de usuario y contraseña, en el index.php
estos datos los mando a otra página "valida.php" pero el detalle es
k me dice k el usuario y contraseña no son correctos... Obviamente si
están los datos correspondientes en la BD de MySql
aquí dejo parte del código index.php
///////////////////////////
<form action="valida.php" method="post" name="formulario" id="formulario">
<p> </p>
<table width="200" border="1" align="center">
<tr>
<th scope="row"><span class="Estilo2 Estilo20">Usuario:</span></th>
<td><label>
<input type="text" name="tusuario" id="tusuario" />
</label></td>
</tr>
<tr>
<th scope="row"><span class="Estilo2 Estilo20">Contraseña:</span></th>
<td><input type="password" name="tpassword" id="tpassword" /></td>
</tr>
<tr>
<th scope="row"><label>
<input type="submit" name="button" id="button" value="Iniciar Session" />
</label></th>
<td><input type="reset" name="button" id="button" value="Cancelar" /></td>
</tr>
</table>
</form>
/////////////////////////////////////////////////
y aki el codigo de valida.php
session_start();
$bandera=0;
echo bandera;
echo "Nombre: ". $_POST["tusuario"];
$usuario = $_POST["tusuario"];
$password = $_POST["tpassword"];
$conectar = mysql_connect("localhost", "root", "");
$bd = mysql_select_db("cafe", $conectar);
echo "se ah conectado";
$consulta = mysql_query("select * from usuarios where usuario = '$usuario' and contrasena = '$password'", $conectar)or die ( mysql_error() );
while ($fila = mysql_fetch_row($consulta)
{
$tipo=$fila[3];
$bandera=1;         
}
//echo "
";
if($bandera==0){?>
<script type="text/javascript"><!--
alert("Contraseña o Password incorrecto"); /*parent.location.href='index.php';*/
// --></script>
}
else
{
?>
$_SESSION["nombre"]=$usuario;$_SESSION["tipo"]=$tipo;
if($tipo=="U"){?>
<script type="text/javascript"><!--
parent.location.href="menu.php";
// --></script>
if($tipo=="A"){?>
<script type="text/javascript"><!--
parent.location.href="admin.php";
// --></script>
// Finalmente cerramos la conexión
mysql_close($conectar);
}
?>

1 Respuesta

Respuesta
1
A simple vista, el código parece correcto, pero puesto que no funciona alguna cosa que no se ve no debe concordar.
No presupongas que todo funciona. Cuando dices: echo "Se ha conectado", de hecho no lo has comprobado.
Deberías comprobar si la conexión se realizó o no (en ese caso, se devuelve false):
if (!$db)
    echo "Se ha conectado";
También deberías comprobar si la consulta devolvió algún registro con:
if (!$consulta)
    echo "Se seleccionó algun registro";
o bien:
echo "Registros: " . mysql_num_rows($consulta);
También te recomendaría almacenar la sentencia primero en una variable y así puedes sacarla por pantalla y ejecutarla directamente en la base de datos (con phpWebAdmin por ejemplo) para ver si falla.
Mira también la collation de los campos en la base de datos. Puede ser que se distingan mayúsculas de minúsculas. También podría ser que se emplease un juego de caracteres distinto, como UTF-8 en la base de datos y eso podría dar problemas si el nombre o la contraseña tienen caracteres acentuados o fuera de lo normal.
Muchas gracias por responder
en esta parte... donde pongo
echo "se ah conectado";

No me aparece en ningún lugar debería de aparecer ya que es una simple impresión de
pantalla...
lo unico k me aparece es este alert
alert("Contraseña o Password incorrecto");
Es todo lo que veo... también eh intentado imprimir la consulta como me dijiste y solamente aparece ese odioso alert :S que pasara.. eh checado la sintaxis de las funciones de MySql y según yo todo estas bien :S
Si no te aparece la linea de "se ah conectado", entonces es que la ejecución se aborta. Lo que ocurre es que no lo puedes ver, porque el servidor debe estar configurado para no mostrar alertas.
Entiendo que los anteriores echo de bandera y Nombre sí se imprimen en pantalla. Si es así, pon más echos para averiguar en qué línea falla. Puede ser que la conexión a la base de datos requiera una contraseña, o que la base de datos no se llame café.
También puedes almacenar en una variable el valor de retorno de la función mysql_select_db y comprobar si devuelve true o false.
Comprobar los retornos de cada función es una buena práctica.
A que te refieres con el valor de retorno, y no me muestra ningún echo... no se por que...
El valor de retorno, es el valor que devuelven las funciones para indicar si ha podido ejecutarse correctamente o no.
Por ejemplo:
$bd = mysql_select_db("cafe", $conectar)
if (!$bd)
   echo "No se ha podido seleccionar la base de datos";
No sé si lo que se ve es todo el código. Ten en cuenta que estás construyendo una página HTML y por tanto antes de cualquier otro echo, deberías haber impreso en la salida la cabecera de la página:
<html>
<head>
<title>Pagina</title>
</head>
<body>
<p>
Ahora ya podrías mandar echo a la salida, puesto que hay una página bien formada.
Luego, deberías cerrar las etiquetas al salir de la página:
</p>
</body>
</html>
Mira ahora mi código ah quedado así... con lo que me dijiste... y lo único que imprime es "hola"
<html>
<head>
<title> Validacion </title>
</head>
<body>
hola
<p>
<?
session_start();
$bandera=0;
echo bandera;
Echo "Nombre: ". Mira ahora mi código ah quedado así... con lo que me dijiste... y lo único que imprime es "hola"
tiny_mce_markerPOST["tusuario"];
$usuario = mira ahora mi codigo ah quedado asi... con lo que me dijiste... y lo unico k imprime es "hola"
tiny_mce_markerPOST["tusuario"];
$password = mira ahora mi codigo ah quedado asi... con lo que me dijiste... y lo unico k imprime es "hola"
tiny_mce_markerPOST["tpassword"];
$conectar = mysql_connect("localhost", "root", "");
$bd = mysql_select_db("cafe", $conectar);
if (!$bd)
echo "Se ha conectado";
$consulta = mysql_query("select * from usuarios", $conectar)or die ( mysql_error() );
//$resultid = mysql_db_query("postal",$ssql) or die( mysql_error() );
echo "Registros: " . mysql_num_rows($consulta);
while ($fila = mysql_fetch_row($consulta)
{
$tipo=$fila[3];
$bandera=1;
}
//echo "
</table>
";
if($bandera==0){?>
<script> alert("Contraseña o Password incorrecto"); /*parent.location.href='index.php';*/</script>
<?
}
else
{
?>
<?
Mira ahora mi código ah quedado así... con lo que me dijiste... y lo único que imprime es "hola"
tiny_mce_markerSESSION["nombre"]=$usuario;mira ahora mi codigo ah quedado asi... con lo que me dijiste... y lo unico k imprime es "hola"
tiny_mce_markerSESSION["tipo"]=$tipo;
mysql_close($conectar);
}
?>
</p>
</body>
</html>
En este caso, estás ejecutando la página en un servidor que no tiene PHP instalado.
Si lo estás ejecutando en tu ordenador personal, deberías tener instalado un servidor HTTP como Apache y el módulo de PHP.
Si no es así, te recomiendo que instales algún compilado 'todo en uno' como XAMPP:
http://www.apachefriends.org/en/xampp-windows.html

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas