PHP - Login PHP MySQL

 
Vista:

Login PHP MySQL

Publicado por Quiroga (12 intervenciones) el 17/02/2010 07:07:33
Hola a todos!

Llevo unos 3 dias volviendome loco con algo que seguramente sea una tontería fácil para la mayoría de vosotros. Os cuento.

He creado una WEB y para poder acceder a su contenido primero hay que loguearse. Los usuarios y passwords están almacenados en una tabla en MySQL. Lógicamente, tiene que recorrer la tabla y comprobar si esta o no el user y el pass para poder autentificar al usuario.

Además del botón para el logueo, hay otro que darse de alta. Sale un pequeño formulario donde introducimos un user y pass y al aceptar, se introducen los valores en la tabla usuarios de MySQL.

Bien, pues como digo, llevo 3 días probando con todos los códigos que veo por la web, pero todavía no estoy muy puesto en PHP asi que no consigo hacer nada, nunca se me loguea el usuario!!!

Os pongo el código (lo he modificado mil veces asi que os lo pongo según lo tengo y me comentais si podeis que hago mal):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Informacion sobre Skate Nacional e Internacional</title>
</head>

<body bgcolor="#000000">

<table width="100%" height="80%">
<tr>
<td valign="middle">
<div align="center"><img src="Fotos/LogoInicio2.jpg" /></div>
</td>
</tr>

<tr>
<td>
<div align="center">
<font color="white">User: <input type="text" name="uss" value=""><hr width="20%"> Pass: <input type="password" name="pss" value=""/></font>
</div>
</td>
</tr>
</table>

<table align="center" cellpadding="12">
<tr>
<td>
<form action="index.php" method="post">
<font color="white"><input type="submit" name="conectar" value="Conectar" /></font>
</form>
</td>
<td>
<form action="index.php" method="post">
<font color="white"><input type="submit" name="Nuevo" value="Alta usuario" /></font>
</form>
</td>
</tr>
</table>

<?php
if ($_REQUEST['conectar']=="Conectar")
{
$con = mysql_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db("proyecto", $con);

$nombre = mysql_query("Select Nombre from usuarios where Nombre = '$_REQUEST[uss]' and Password = '$_REQUEST[pss]'");

if (mysql_error($con))
{
die('Error: ' . mysql_error());
}

if ($nombre == "$_REQUEST[uss]")
{
echo "bien"; //comprobacion del IF

}
else
{
echo "mal"; //comprobacion del IF

}

mysql_close($con);
}
elseif ($_REQUEST['Nuevo']=='Alta usuario')
{
echo<<<fin
<font color="#FFFFFF">
<br><center> ALTA DE USUARIO. INTRODUZCA USUARIO Y PASSWORD </center><br>
<table width="100%" height="100%">
<tr>
<td valign="middle">
<div align="center">
<form action="index.php" method="post">
User: <input type="text" name="nom" value="" />
<br />
Pass: <input type="password" name="pass" value="" />
<br />
<input type="submit" name="enviar" value="Aceptar" />
</form>
</div>
</td>
</tr>
</table>
</font>
fin;

if ($_REQUEST['enviar']=="Aceptar")
{
$con = mysql_connect("localhost","root","");

if (!$con)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db("Proyecto", $con);

$U = $_REQUEST["nom"];
$P2 = $_REQUEST["pass"];

if ($U == NULL && $P2 == NULL)
{
echo "Introduce todos los datos";
}
else
{
mysql_query("INSERT INTO usuarios (Nombre, Password) VALUES ('$_REQUEST[nom]', '$_REQUEST[pass]')");

mysql_close($con);
}
}

}
?>

</body>

</html>

MUCHAS GRACIAS A TODOS!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Login PHP MySQL

Publicado por Diego Romero (1450 intervenciones) el 17/02/2010 09:47:22
Uff, tantos problemas que no sé por dónde empezar.

A ver...

Esto:

if ($nombre == "$_REQUEST[uss]")

No tiene sentido. Estás preguntando si la variable $nombre vale *la cadena* "$_REQUEST[uss]" y no el valor de la variable $_REQUEST[uss].

Hablando de $_REQUEST, no deberías usarla, en tu caso lo que debes usar es $_POST ya que ese es el método especificado en el <form> de tu página.

Hablando del <form>, tienes dos <inputs> que está fuera de cualquier <form>, precisamente los que deben enviar el usuario y la contraseña. Por tanto jamás vas a recibir ninguno de ellos.

Luego la consulta a la base de datos.

$nombre = mysql_query("Select Nombre from usuarios where Nombre = '$_REQUEST[uss]' and Password = '$_REQUEST[pss]'");

La variable $nombre es un recurso, contiene un puntero a los registros que devolvió la consulta SQL, no contiene ningún valor de ningún registro, no es más que un puntero que apunta a un conjunto de registros en memoria (conjunto que puede contener uno, ninguno muchos registros dependiendo del resultado del SELECT).
Para recorrer ese conjunto debes usar la función mysql_fetch_array() o mysql_fetch_assoc(), cualquiera de las dos sirve (hay diferencias sutiles pero no viene al caso). Además te sería útil la funcion mysql_num_rows() que te dice cuántos registros devolvió la consulta. Para tu caso sería ideal pues si el SELECT no encontró el nombre o la password devolverá un conjunto vacío de registros, por tanto no existe el usuario o la contraseña es incorrecta.

Entonces sería:

$nombre = $_POST["uss"];
$password = $_POST["pss"];
$registros = mysql_query("Select Nombre from usuarios where Nombre = '".$nombre."' and Password = '".$password."'");
if (mysql_num_rows($registros) == 0) { echo "Nombre de usuario o contraseña incorrectos"; }
else { echo "Nombre y contraseña correctos!" }
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Login PHP MySQL

Publicado por Quiroga (12 intervenciones) el 18/02/2010 02:52:38
Bffff... sabía que tendría fallos, pero tantos?? jajaja lo que me queda por aprender...

Vale, siguiendo tus indicaciones, he metido esos 2 input que tenia dentro de un form (no me habia dado cuenta de esto), y ha quedado de este modo:

<table width="100%" height="80%">
<tr>
<td valign="middle">
<div align="center"><img src="Fotos/LogoInicio2.jpg" /></div>
</td>
</tr>

<tr>
<td>
<div align="center">
<form action="index.php" method="post">
<font color="white">User: <input type="text" name="uss" value=""><hr width="20%"> Pass: <input type="password" name="pss" value=""/></font>
</form>
</div>
</td>
</tr>
</table>

Respecto a $_REQUEST, lo uso por comodidad ya que se puede usar tanto con POST como con GET... aunque tienes razón, supongo que lógico es usar el correspondiente.

Por último, he sustituido mi código por el que has escrito, usando mysql_num_rows en lugar de mysql_fetch_array() como me aconsejabas. Mysql_num_rows lo entiendo perfectamente, en cambio mysql_flecth_array no se exactamente que es lo que hace. Recorre $nombre en busca de uss y pss??

El código final ha quedado asi, aunque el logueo sigue sin funcionar. Siempre me aparece "Nombre de usuario o contraseña incorrectos", estén o no los usuarios introducidos en la BBDD, asi que tiene que haber otro fallo que llevo toda la tarde intentando averiguar pero que soy incapaz de descubrir.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Informacion sobre Skate Nacional e Internacional</title>
</head>

<body bgcolor="#000000">

<table width="100%" height="80%">
<tr>
<td valign="middle">
<div align="center"><img src="Fotos/LogoInicio2.jpg" /></div>
</td>
</tr>

<tr>
<td>
<div align="center">
<form action="index.php" method="post">
<font color="white">User: <input type="text" name="uss" value=""><hr width="20%"> Pass: <input type="password" name="pss" value=""/></font>
</form>
</div>
</td>
</tr>
</table>

<table align="center" cellpadding="12">
<tr>
<td>
<form action="index.php" method="post">
<font color="white"><input type="submit" name="conectar" value="Conectar" /></font>
</form>
</td>
<td>
<form action="index.php" method="post">
<font color="white"><input type="submit" name="Nuevo" value="Alta usuario" /></font>
</form>
</td>
</tr>
</table>

<?php
if ($_REQUEST['conectar']=="Conectar")
{
$con = mysql_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db("proyecto", $con);

$nombre = $_POST["uss"];
$password = $_POST["pss"];

$registros = mysql_query("Select Nombre from usuarios where Nombre = '".$nombre."' and Password = '".$password."'");

if (mysql_num_rows($registros) == 0)
{
echo "Nombre de usuario o contraseña incorrectos";
}
else
{
echo "Nombre y contraseña correctos!";
}
mysql_close($con);
}
elseif ($_REQUEST['Nuevo']=='Alta usuario')
{
echo<<<fin
<font color="#FFFFFF">
<br><center> ALTA DE USUARIO. INTRODUZCA USUARIO Y PASSWORD </center><br>
<table width="100%" height="100%">
<tr>
<td valign="middle">
<div align="center">
<form action="index.php" method="post">
User: <input type="text" name="nom" value="" />
<br />
Pass: <input type="password" name="pass" value="" />
<br />
<input type="submit" name="enviar" value="Aceptar" />
</form>
</div>
</td>
</tr>
</table>
</font>
fin;

if ($_REQUEST['enviar']=="Aceptar")
{
$con = mysql_connect("localhost","root","");

if (!$con)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db("Proyecto", $con);

$U = $_REQUEST["nom"];
$P2 = $_REQUEST["pass"];

if ($U == NULL && $P2 == NULL)
{
echo "Introduce todos los datos";
}
else
{
mysql_query("INSERT INTO usuarios (Nombre, Password) VALUES ('$_REQUEST[nom]', '$_REQUEST[pass]')");

mysql_close($con);
}
}

}
?>

</body>

</html>

MUCHISIMAS GRACIAS POR TODO, me estás ayudando muchísimo!

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Login PHP MySQL

Publicado por Diego Romero (1450 intervenciones) el 18/02/2010 03:58:35
Es que además has dejado afuera el botón "submit" que envía los datos :P.

Debe quedar así:

<form action="index.php" method="post">
User: <input type="text" name="uss" value=""><br />
Pass: <input type="password" name="pss" value=""/><br />
<input type="submit" name="conectar" value="Conectar" />
</form>

Ese botón de "alta usuario" no sirve para nada. Antes que eso es mejor que pongas un link <a> que envíe al visitante a otra página con otro formulario para que llene los datos de alta como usuario registrado.

Tu problema, además de la poca experiencia y por eso mismo, es que intentas hacer muchas cosas en un solo archivo. No es lo mismo verificar que un visitante tiene las credenciales (user y password) correctas, que dar de alta un nuevo usuario registrado. Son dos tareas distintas cada una con su propia lógica.

Sobre mysql_fetch_array() ya hablaremos después.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Login PHP MySQL

Publicado por Quiroga (12 intervenciones) el 18/02/2010 05:22:12
Vale, perfecto!!! Ya puedo loguearme!!

Y si, tienes toda la razón, creo que quiero hacer demasiadas cosas en el mismo archivo...

Voy a hacer lo que me aconsejas y llevar la parte de código de Alta de usuario a otra página. Ahora tengo otra duda: ¿cómo hago tanto para que me direccione a Alta.php cuando le doy al botón correspondiente de ALTA como para que, una vez el logueo es correcto, me redireccione a marcos.php? Todo lo que había hecho hasta ahora siempre era en el mismo archivo, asi que no me había hecho falta...

Lo único que había metido en un archivo distinto eran funciones o partes de código que se repetían mucho y para llamarlas ponía un "include", pero no creo que esa sea la manera que necesito en este caso...

De verdad, muchas gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Login PHP MySQL

Publicado por Quiroga (12 intervenciones) el 18/02/2010 06:25:42
Es una pena que no se puedan editar ni borrar los post!

Ya he solucionado el modo de redireccionamiento. No se si es la mejor manera o no, pero por lo menos cumple su funcion. Lo hago a través de un script:

<?php
if ($_POST['conectar']=="Conectar")
{
$con = mysql_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db("proyecto", $con);

$nombre = $_POST["uss"];
$password = $_POST["pss"];

$registros = mysql_query("Select Nombre from usuarios where Nombre = '".$nombre."' and Password = '".$password."'");

if (mysql_num_rows($registros) == 0)
{
echo "<center><font color='white'>Nombre de usuario o contraseña incorrecto.</font></center>";
}
else
{
if ($nombre == "Admin")
{
echo "<script type='text/javascript'>";
echo "window.location='Admin.php'";
echo "</script>";
}

echo "<script type='text/javascript'>";
echo "window.location='Marcos.php'";
echo "</script>";

}
mysql_close($con);
}
elseif ($_POST['Nuevo']=='Alta usuario')
{
echo "<script type='text/javascript'>";
echo "window.location='Alta.php'";
echo "</script>";
}
?>

Espero que no sea una chapuza xD

Por ahora no tengo mas dudas, aunque es cuestion de horas lo que tardare en volver a tirarme de los pelos de la frustracion y volver a que me heches una mano :$, asi que no doy por zanjado el tema.

Muchas gracias por toda la ayuda, Diego!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema alta usuario

Publicado por Quiroga (1 intervención) el 22/02/2010 05:23:37
Hola!!

Vuelvo a tener problemas...

A la hora de dar de alta a un usuario necesito 2 cosas. Primero que se compruebe si estan los 2 campos rellenos (usuario y password) y segundo comprobar que dicho usuario no existe ya en la BBDD.

Por ahora estoy en el primer paso y soy incapaz de hacer que avance... Pongo para que os sea mas facil entenderme:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Alta de nuevo usuario</title>
</head>

<body bgcolor="#000000">

<font color="#FFFFFF">
<table width="100%" height="100%">
<tr>
<td valign="middle">
<div align="center">
<form action="alta.php" method="post">
<h2>Fomulario de Alta de usuario.</h2><br /><br />
User: <input type="text" name="nom" value="" />
<br />
Pass: <input type="password" name="pass" value="" />
<br /><br />
<input type="submit" name="enviar" value="Aceptar" />
<input type="submit" name="volver" value="Volver" />
</form>
</div>
</td>
</tr>
</table>
</font>

<?php
if ($_REQUEST['enviar']=="Aceptar")
{
$con = mysql_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db("Proyecto", $con);

$nmb = strlen($_REQUEST[nom]);
$psw = strlen($_REQUEST[pass]);

if ($nmb > 0)
{
if ($pass > 0)
{
mysql_query("INSERT INTO usuarios(Nombre, Password) VALUES ('$_REQUEST[nom]', '$_REQUEST[pass]')");

mysql_close($con);

echo "<script type='text/javascript'>";
echo "window.location='Index.php'";
echo "</script>";
}
else
{
Echo "<br><center><font color='white'>Debes rellenar la contraseña.</font></center>";
}
}
else
{
Echo "<br><center><font color='white'>Debes rellenar el usuario.</font></center>";
}
}

if ($_REQUEST['volver']=="Volver")
{
echo "<script type='text/javascript'>";
echo "window.location='Index.php'";
echo "</script>";
}
?>

</body>

</html>

Cuando entra en los IF, funciona bien si solo introduces el usuario y dejas el Password vacio o viceversa, mostrando el mensaje preciso en cada momento. En cambio, si dejas los 2 campos vacios o los rellenas aparece siempre el mensaje "Debes rellenar la contraseña.".

Por que me ocurre esto?? Que parte del IF tengo mal?? Siento ser tan torpe, porque seguro que el fallo es evidente...

Gracias a todos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar