Foros del Web » Programando para Internet » PHP »

Duda con Login de Usuarios

Estas en el tema de Duda con Login de Usuarios en el foro de PHP en Foros del Web. Amigos tengo un sistema de registro de usuarios en PHP con su respectiva activación posteriormente, pero además estoy utilizando un login de usuarios mediante cookies. ...
  #1 (permalink)  
Antiguo 13/05/2011, 07:53
 
Fecha de Ingreso: mayo-2011
Mensajes: 40
Antigüedad: 13 años
Puntos: 1
Amigos tengo un sistema de registro de usuarios en PHP con su respectiva activación posteriormente, pero además estoy utilizando un login de usuarios mediante cookies.

Pues bien he conseguido que mis usuarios activen su cuenta mediante un link mandado a su correo, pero estoy intentado que los usuarios que no tengan activada su cuenta no puedan loguearse.

Tengo un campo en mi base de datos que se llama confirmacion en el que el valor 1 es usuario activado y 0 usuario sin activar, aqui les dejo el codigo aver en que fallo:

Código PHP:
<?
$usuario 
$_POST['usuario'];
$password $_POST['password'];

$conexion mysql_connect("localhost","adri","1907_2007");
mysql_select_db("PHP"$conexion);

$sql "SELECT id_usuario FROM usuarios WHERE nombre_usuario = '$usuario' AND contrasena = '$password'";
$sql2 "SELECT confirmacion FROM usuarios WHERE nombre_usuario = '$usuario' AND contrasena = '$password'";
$comprobar mysql_query($sql);
$comprobar2 mysql_query($sql2);
if(
mysql_query($comprobar2) == 0)
    {
        echo 
"Lo siento, tienes que activar tu cuenta";
    }
else
    {

if(
mysql_num_rows($comprobar) > 0)
    {
        
$id_usuario mysql_result($comprobar,0);
        
setcookie("cookie_lh""$id_usuario"time() + 60);
        
header ("Location:inicio.php");
    }
else
    {
        echo 
"Usuario o Password incorrectos <br></br> Intentelo de nuevo: <a href=iniciosesion.html>Iniciar Sesion</a>";
        
    }


    }


?>
Destacar que estoy empezando en PHP, y todavía nose que permiten y que no las funciones..

Última edición por GatorV; 13/05/2011 a las 08:13
  #2 (permalink)  
Antiguo 13/05/2011, 08:16
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 13 años
Puntos: 261
Respuesta: Duda con Login de Usuarios

Utiliza
SELECT * FROM usuarios WHERE nombre_usuario

En vez de:
SELECT id_usuario FROM usuarios WHERE nombre_usuario

Con esto (SELECT id_usuario) le estas diciendo que trabaje solo con la columna "id_usuario". Y "WHERE nombre_usuario" devolverá una consulta vacía porque has limitado anteriormente el número de columnas a incluir en la consulta.
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #3 (permalink)  
Antiguo 13/05/2011, 08:20
 
Fecha de Ingreso: abril-2011
Mensajes: 17
Antigüedad: 13 años
Puntos: 4
Respuesta: Duda con Login de Usuarios

Cita:
Iniciado por Uncontroled_Duck Ver Mensaje
Utiliza
SELECT * FROM usuarios WHERE nombre_usuario

En vez de:
SELECT id_usuario FROM usuarios WHERE nombre_usuario

Con esto (SELECT id_usuario) le estas diciendo que trabaje solo con la columna "id_usuario". Y "WHERE nombre_usuario" devolverá una consulta vacía porque has limitado anteriormente el número de columnas a incluir en la consulta.
100% seguro funciona.
  #4 (permalink)  
Antiguo 13/05/2011, 08:24
 
Fecha de Ingreso: mayo-2011
Mensajes: 40
Antigüedad: 13 años
Puntos: 1
Respuesta: Duda con Login de Usuarios

No, pero la consulta que me comprueba si el campo confirmacion esta a 0 o 1 es esta:

Código PHP:
$sql2 "SELECT confirmacion FROM usuarios WHERE nombre_usuario = '$usuario' AND contrasena = '$password'"
y aqui compruebo si puede o no loguearse el usuario:

Código PHP:
$comprobar2 mysql_query($sql2);
if(
mysql_query($comprobar2) == 0)
    {
        echo 
"Lo siento, tienes que activar tu cuenta";
    } 
Gracias por la respuesta.
  #5 (permalink)  
Antiguo 13/05/2011, 08:28
 
Fecha de Ingreso: diciembre-2007
Mensajes: 427
Antigüedad: 16 años, 4 meses
Puntos: 35
Respuesta: Duda con Login de Usuarios

Y el error cual es no lo valida??...
Pues yo lo q veo es q ese comprobar2 tambien te va a arrojar un cero en caso de q el usuario no exista en la BD...

Pienso q primero debes validar si el usuario existe en la bd y despues mirar si ha confirmado o no.
Salu2.
  #6 (permalink)  
Antiguo 13/05/2011, 08:35
 
Fecha de Ingreso: mayo-2011
Mensajes: 40
Antigüedad: 13 años
Puntos: 1
Respuesta: Duda con Login de Usuarios

El error era que el usuario podia loguearse sin activar su cuenta, es decir, con 0 en el campo confirmacion también se podia loguear, lo que yo quiero es que aquel usuario que tenga 0 en el campo confirmacion no pueda acceder.

Ya supe como hacerlo, quedaria así:

Código PHP:
<?
$usuario 
$_POST['usuario'];
$password $_POST['password'];

$conexion mysql_connect("localhost","adri","1907_2007");
mysql_select_db("PHP"$conexion);

$sql "SELECT id_usuario FROM usuarios WHERE nombre_usuario = '$usuario' AND contrasena = '$password'";
$sql2 "SELECT confirmacion FROM usuarios WHERE nombre_usuario = '$usuario' AND contrasena = '$password'";
$comprobar mysql_query($sql);
$comprobar2 mysql_query($sql2);
if(
mysql_result($comprobar2,0,"confirmacion") == 0)
    {
        echo 
"Lo siento, tienes que activar tu cuenta";
    }
else
    {

if(
mysql_num_rows($comprobar) > 0)
    {
        
$id_usuario mysql_result($comprobar,0);
        
setcookie("cookie_lh""$id_usuario"time() + 60);
        
header ("Location:inicio.php");
    }
else
    {
        echo 
"Usuario o Password incorrectos <br></br> Intentelo de nuevo: <a href=iniciosesion.html>Iniciar Sesion</a>";
        
    }


    }


?>
  #7 (permalink)  
Antiguo 13/05/2011, 08:38
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 13 años
Puntos: 261
Respuesta: Duda con Login de Usuarios

Cita:
Iniciado por maxpower2008 Ver Mensaje
Y el error cual es no lo valida??...
Pues yo lo q veo es q ese comprobar2 tambien te va a arrojar un cero en caso de q el usuario no exista en la BD...
Correcto, como apunta maxpower2008 esa línea tiene el mismo error.

Seleccionas la columna "confirmacion" y haces la consulta en "nombre_usuario"

Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #8 (permalink)  
Antiguo 13/05/2011, 08:43
 
Fecha de Ingreso: mayo-2011
Mensajes: 40
Antigüedad: 13 años
Puntos: 1
Respuesta: Duda con Login de Usuarios

Mirar el código que acabo de publicar, aver si ese vale. Un saludo
  #9 (permalink)  
Antiguo 13/05/2011, 08:45
 
Fecha de Ingreso: diciembre-2007
Mensajes: 427
Antigüedad: 16 años, 4 meses
Puntos: 35
Respuesta: Duda con Login de Usuarios

Entonces tambien podrias hacer el sql agregandole un and y listo.

Cita:
$sql = "SELECT id_usuario FROM usuarios WHERE nombre_usuario = '$usuario' AND contrasena = '$password'" and confirmacion=1;
  #10 (permalink)  
Antiguo 13/05/2011, 08:46
 
Fecha de Ingreso: febrero-2009
Mensajes: 580
Antigüedad: 15 años, 3 meses
Puntos: 13
Respuesta: Duda con Login de Usuarios

Curioso ese ==,

prueba con:

Código PHP:
<?
$usuario 
$_POST['usuario'];
$password $_POST['password'];

$conexion mysql_connect("localhost","adri","1907_2007");
mysql_select_db("PHP"$conexion);

$sql "SELECT id_usuario FROM usuarios WHERE nombre_usuario = '$usuario' AND contrasena = '$password'";
$sql2 "SELECT confirmacion FROM usuarios WHERE nombre_usuario = '$usuario' AND contrasena = '$password'";
$comprobar mysql_query($sql);
$comprobar2 mysql_query($sql2);
if(
mysql_num_rows($comprobar2) > 0)
    {
        echo 
"Lo siento, tienes que activar tu cuenta";
    }
else
    {

if(
mysql_num_rows($comprobar) > 0)
    {
        
$id_usuario mysql_result($comprobar,0);
        
setcookie("cookie_lh""$id_usuario"time() + 60);
        
header ("Location:inicio.php");
    }
else
    {
        echo 
"Usuario o Password incorrectos <br></br> Intentelo de nuevo: <a href=iniciosesion.html>Iniciar Sesion</a>";
        
    }


    }


?>
__________________
¿ya conoces la red social de cocina? descubre y comparte recetas de cocina
TONIWEB, un programador web freelance
  #11 (permalink)  
Antiguo 13/05/2011, 08:50
 
Fecha de Ingreso: mayo-2011
Mensajes: 40
Antigüedad: 13 años
Puntos: 1
Respuesta: Duda con Login de Usuarios

Cita:
Iniciado por maxpower2008 Ver Mensaje
Entonces tambien podrias hacer el sql agregandole un and y listo.
Tienes toda la razón y además me ahorro mucho mas código. Muchas Gracias, tu solución está mas optimizada. Un saludo
  #12 (permalink)  
Antiguo 13/05/2011, 08:56
 
Fecha de Ingreso: mayo-2011
Mensajes: 40
Antigüedad: 13 años
Puntos: 1
Respuesta: Duda con Login de Usuarios

Cita:
Iniciado por Bam_Margera Ver Mensaje
Curioso ese ==,

prueba con:

Código PHP:
<?
$usuario 
$_POST['usuario'];
$password $_POST['password'];

$conexion mysql_connect("localhost","adri","1907_2007");
mysql_select_db("PHP"$conexion);

$sql "SELECT id_usuario FROM usuarios WHERE nombre_usuario = '$usuario' AND contrasena = '$password'";
$sql2 "SELECT confirmacion FROM usuarios WHERE nombre_usuario = '$usuario' AND contrasena = '$password'";
$comprobar mysql_query($sql);
$comprobar2 mysql_query($sql2);
if(
mysql_num_rows($comprobar2) > 0)
    {
        echo 
"Lo siento, tienes que activar tu cuenta";
    }
else
    {

if(
mysql_num_rows($comprobar) > 0)
    {
        
$id_usuario mysql_result($comprobar,0);
        
setcookie("cookie_lh""$id_usuario"time() + 60);
        
header ("Location:inicio.php");
    }
else
    {
        echo 
"Usuario o Password incorrectos <br></br> Intentelo de nuevo: <a href=iniciosesion.html>Iniciar Sesion</a>";
        
    }


    }


?>
Cierto, así también funciona, además con esta opción se especifica más cual es el motivo por el que el usuario no pueda acceder.

Ya que si introduce mal los datos se va al ultimo echo y si no ha activado su cuenta se queda en este:

Código PHP:
if(mysql_num_rows($comprobar2) > 0)
    {
        echo 
"Lo siento, tienes que activar tu cuenta";
    }
else
    { 
Muchas gracias.
  #13 (permalink)  
Antiguo 13/05/2011, 09:04
Avatar de edwines  
Fecha de Ingreso: mayo-2011
Mensajes: 21
Antigüedad: 13 años
Puntos: 3
Respuesta: Duda con Login de Usuarios

Cita:
Código:
$comprobar2 = mysql_query($sql2); 
if(mysql_query($comprobar2) == 0) 
    { 
        echo "Lo siento, tienes que activar tu cuenta"; 
    }
Amigo, lo que sucede es que estas tratando de realizar la comparación directamente del resource, la cual simplemente será evaluada como false si el usuario no existe o true si el usuario existe.

Si observas la descripción de la función [URL="http://co.php.net/manual/es/function.mysql-query.php"]mysql_query()[/URL] observaras que el resultado retornado NO es el valor de la columna (directamente hablando). Lo que te devuelve tienes qué pasarlo por tras funciones para así lograr ver el valor que quieres.

Sería más o menos algo así:

Código PHP:
$result mysql_query($comprobar2);
$datos mysql_fetch_assoc($result);

if ( 
$datos['confirmacion'] == )
{
  echo 
"lo siento, tienes que activar tu cuenta";

mysql_fetch_assoc() te crea un array con cada fila del result... en este caso solo vemos la primera fila porque se supone que no deben haber más de un usuario con ese nombre.

Por otro lado te recomiendo que minimices las consultas a una, más o menos así:

Código PHP:
(...)

$sql "SELECT * FROM usuarios WHERE nombre_usuario = '$usuario' AND contrasena = '$password'"

$result mysql_query($sql);

// Comprobamos si la consulta retorno algún registro
if ( mysql_num_rows($result) != )
{
  
$datos mysql_fetch_assoc$result );
  
  
// Comprobando si esta inactivo
  
if( $datos['confirmacion'] == )
 {}

  
// Id del usuario
  
$id_usuario $datos['id_usuario'];
(...)

  #14 (permalink)  
Antiguo 13/05/2011, 09:14
Avatar de rikardoz  
Fecha de Ingreso: abril-2011
Ubicación: En mi casa
Mensajes: 165
Antigüedad: 13 años
Puntos: 46
Información Respuesta: Duda con Login de Usuarios

Te dejo mi solución, yo usaria de esta forma ;)
Código PHP:
<? 
$usuario 
$_POST['usuario']; 
$password $_POST['password']; 
$conexion mysql_connect("localhost","adri","1907_2007"); 
mysql_select_db("PHP"$conexion); 
$row mysql_fetch_assoc(mysql_query("SELECT id_usuario,confirmacion FROM usuarios WHERE nombre_usuario = '".$usuario."' AND contrasena = '".$password."'"));
$id_usuario $row['id_usuario'];         
$confirmacion $row['confirmacion'];
if(
$confirmacion=="0"):
echo 
"Lo siento, tienes que activar tu cuenta"
elseif(
$confirmacion=="1"): 
setcookie("cookie_lh""$id_usuario"time() + 60); 
header ("Location:inicio.php"); 
else: 
echo 
"Usuario o Password incorrectos <br></br> Intentelo de nuevo: <a href=iniciosesion.html>Iniciar Sesion</a>"
endif;
?>
Me avisas cualquier error, o duda :D
__________________
Agregadecer no cuesta nada O SI?
  #15 (permalink)  
Antiguo 13/05/2011, 09:17
 
Fecha de Ingreso: mayo-2011
Mensajes: 40
Antigüedad: 13 años
Puntos: 1
Respuesta: Duda con Login de Usuarios

Cita:
Iniciado por edwines Ver Mensaje
Amigo, lo que sucede es que estas tratando de realizar la comparación directamente del resource, la cual simplemente será evaluada como false si el usuario no existe o true si el usuario existe.

Si observas la descripción de la función [URL="http://co.php.net/manual/es/function.mysql-query.php"]mysql_query()[/URL] observaras que el resultado retornado NO es el valor de la columna (directamente hablando). Lo que te devuelve tienes qué pasarlo por tras funciones para así lograr ver el valor que quieres.

Sería más o menos algo así:

Código PHP:
$result mysql_query($comprobar2);
$datos mysql_fetch_assoc($result);

if ( 
$datos['confirmacion'] == )
{
  echo 
"lo siento, tienes que activar tu cuenta";

mysql_fetch_assoc() te crea un array con cada fila del result... en este caso solo vemos la primera fila porque se supone que no deben haber más de un usuario con ese nombre.

Por otro lado te recomiendo que minimices las consultas a una, más o menos así:

Código PHP:
(...)

$sql "SELECT * FROM usuarios WHERE nombre_usuario = '$usuario' AND contrasena = '$password'"

$result mysql_query($sql);

// Comprobamos si la consulta retorno algún registro
if ( mysql_num_rows($result) != )
{
  
$datos mysql_fetch_assoc$result );
  
  
// Comprobando si esta inactivo
  
if( $datos['confirmacion'] == )
 {}

  
// Id del usuario
  
$id_usuario $datos['id_usuario'];
(...)

Muchas Gracias, intentare minimizar un poco las cosas. Un saludo y gracias por la explicación teórica.
  #16 (permalink)  
Antiguo 13/05/2011, 09:24
 
Fecha de Ingreso: mayo-2011
Mensajes: 40
Antigüedad: 13 años
Puntos: 1
Respuesta: Duda con Login de Usuarios

Cita:
Iniciado por rikardoz Ver Mensaje
Te dejo mi solución, yo usaria de esta forma ;)
Código PHP:
<? 
$usuario 
$_POST['usuario']; 
$password $_POST['password']; 
$conexion mysql_connect("localhost","adri","1907_2007"); 
mysql_select_db("PHP"$conexion); 
$row mysql_fetch_assoc(mysql_query("SELECT id_usuario,confirmacion FROM usuarios WHERE nombre_usuario = '".$usuario."' AND contrasena = '".$password."'"));
$id_usuario $row['id_usuario'];         
$confirmacion $row['confirmacion'];
if(
$confirmacion=="0"):
echo 
"Lo siento, tienes que activar tu cuenta"
elseif(
$confirmacion=="1"): 
setcookie("cookie_lh""$id_usuario"time() + 60); 
header ("Location:inicio.php"); 
else: 
echo 
"Usuario o Password incorrectos <br></br> Intentelo de nuevo: <a href=iniciosesion.html>Iniciar Sesion</a>"
endif;
?>
Me avisas cualquier error, o duda :D
Muy buena también tu solución. Gracias, un saludo
  #17 (permalink)  
Antiguo 13/05/2011, 09:32
 
Fecha de Ingreso: mayo-2011
Mensajes: 40
Antigüedad: 13 años
Puntos: 1
Respuesta: Duda con Login de Usuarios

¿Se os ocurre como sería para reenviar el correo de confirmacion sin necesidad de que se registre de nuevo el usuario?
  #18 (permalink)  
Antiguo 14/05/2011, 09:52
Avatar de edwines  
Fecha de Ingreso: mayo-2011
Mensajes: 21
Antigüedad: 13 años
Puntos: 3
Respuesta: Duda con Login de Usuarios

Solo tendrías qué poner un link para que el usuario pueda reenviar cuando le sale que no esta activo, así:

Código PHP:
// Comprobando si esta inactivo 
if( $datos['confirmacion'] == 
{
  echo 
"Para poder acceder debes confirmar tu cuenta de correo electrónico. si deseas reenviar el correo de confirmación da clic <a href="reenviarcorreo.php">aquí</a>';  

Ya en el archivo para reenviar el correo solo debes ejecutar el mismo código qué hiciste para enviar el correo inicial.
  #19 (permalink)  
Antiguo 14/05/2011, 11:17
 
Fecha de Ingreso: mayo-2011
Mensajes: 40
Antigüedad: 13 años
Puntos: 1
Respuesta: Duda con Login de Usuarios

Cita:
Iniciado por edwines Ver Mensaje
Solo tendrías qué poner un link para que el usuario pueda reenviar cuando le sale que no esta activo, así:

Código PHP:
// Comprobando si esta inactivo 
if( $datos['confirmacion'] == 
{
  echo 
"Para poder acceder debes confirmar tu cuenta de correo electrónico. si deseas reenviar el correo de confirmación da clic <a href="reenviarcorreo.php">aquí</a>';  

Ya en el archivo para reenviar el correo solo debes ejecutar el mismo código qué hiciste para enviar el correo inicial.
Si eso si lo entiendo, pero claro el archivo donde tengo el envio del correo inicial es el del formulario donde recoge los datos de usuario. Lo que querría seria crear otro archivo para enviar el email pero sin necesidad de tener el formulario, como se haría para recoger los datos del usuario al que quiero mandar el mail?
  #20 (permalink)  
Antiguo 14/05/2011, 11:26
Avatar de s00rk  
Fecha de Ingreso: octubre-2010
Ubicación: Mexico
Mensajes: 238
Antigüedad: 13 años, 6 meses
Puntos: 48
Respuesta: Duda con Login de Usuarios

Cita:
Iniciado por AdriMoron Ver Mensaje
Si eso si lo entiendo, pero claro el archivo donde tengo el envio del correo inicial es el del formulario donde recoge los datos de usuario. Lo que querría seria crear otro archivo para enviar el email pero sin necesidad de tener el formulario, como se haría para recoger los datos del usuario al que quiero mandar el mail?
Solo ocuparas un formulario que el usuario ingrese su email, luego en el codigo busca un usuario con tal email si no existe le diga que el email no existe en la base de datos y si existe pues recoge la clave para activar su cuenta y se la envia.
  #21 (permalink)  
Antiguo 14/05/2011, 12:40
 
Fecha de Ingreso: mayo-2011
Mensajes: 40
Antigüedad: 13 años
Puntos: 1
Respuesta: Duda con Login de Usuarios

Cita:
Iniciado por s00rk Ver Mensaje
Solo ocuparas un formulario que el usuario ingrese su email, luego en el codigo busca un usuario con tal email si no existe le diga que el email no existe en la base de datos y si existe pues recoge la clave para activar su cuenta y se la envia.
Muchas Gracias, voi a intentarlo y os cuento..!!
  #22 (permalink)  
Antiguo 14/05/2011, 13:39
 
Fecha de Ingreso: mayo-2011
Mensajes: 10
Antigüedad: 13 años
Puntos: 0
Respuesta: Duda con Login de Usuarios

:d .

Última edición por tonopxc; 15/05/2011 a las 10:40

Etiquetas: login, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:14.