Foros del Web » Programando para Internet » PHP »

Seguimos con el registro de usuarios

Estas en el tema de Seguimos con el registro de usuarios en el foro de PHP en Foros del Web. Bien, mi identificador de usuarios esta avanzando gracias a vosotros. Me surge otro problema como los de siempre ke no se establecer las condiciones en ...
  #1 (permalink)  
Antiguo 29/06/2004, 09:05
 
Fecha de Ingreso: julio-2002
Mensajes: 40
Antigüedad: 15 años, 5 meses
Puntos: 0
Seguimos con el registro de usuarios

Bien, mi identificador de usuarios esta avanzando gracias a vosotros. Me surge otro problema como los de siempre ke no se establecer las condiciones en un if. Ahora lo ke kiero es ke un usuario que esta registrado pueda ingresar en el sistema y recibir la cookie ke lo hace usuario registrado. Estoy usando este codigo pero no se como comparar las variables recibias del POST con las que recibo de la consulta a la base de datos.

<?php
include_once("../../db/db.php");
$link=Conectarse();
$usr_login=$_POST['usr_login'];
$usr_pass=$_POST['usr_pass'];
$result=mysql_query("SELECT * FROM `usuarios` WHERE 1 AND `usr_login` LIKE '$usr_login'",$link);
if () /* aqui es donde me falta la condicion */
{
setcookie("user", $usr_login, time()+600,"/","");
}
else
{
header ("Location: namenoexist.php");
}
mysql_free_result($result);
mysql_close($link);
?>
  #2 (permalink)  
Antiguo 29/06/2004, 09:58
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Bueno . en tu sentencia SQL puedes hacerlo todo de una:

Código PHP:
$result=mysql_query("SELECT COUNT(*) FROM `usuarios` WHERE `usr_login`= '$usr_login' AND `usr_login`= '$usr_pass'",$link); 
Esa consulta te arrojará un registro (record-set) con un valor 1 o 0 dependiendo si la contraseña y el usuario es correcta.


Así que podras hacer:

Código PHP:
if (mysql_result($result,0) == 1){
//liberas memoria de la consulta realizada y cierras la conexión .. no es necesario pero si lo quieres usar no está de más.
mysql_free_result($result);
mysql_close($link);

// usuario autentificado . haz lo que tengas que hacer
// creas tus cookies .. 

} else {
// Usuario no autentificado
header ("Location: ....");
exit;

Pero .. si quieres seguir con tu método .. debes obtener los registros que te va arrojar tu consulta SQL .. Como usas "LIKE" podría arrojarte más de un registro .. imagina un "user" de nombre: "pepe" y otro "nosepepenose" .. ambos registros serán arrojados por tu consulta y .. eso no es lo que quieres atendiendo a que cada nombre de "user" debería ser único!.

Confiando en que tendras usuarios de nombre único .. puedes usar mysql_result() para obtener ese único resultado que deberías obtener:

Código PHP:
if (mysql_result($result,0,'user_pass_nombre_campo') == $usr_pass){
// contraseña valida y .. el usuario existe .
} else {
// contraseña no valida .. el usuario existe.

pero antes de todo esto deberías validar si la consulta SQL arrojó algún resultado o no (record-set ) por qué sino este mysql_result() dará un error por qué no se le entregará un resultado válido ..

Código PHP:
if (mysql_num_rows($result) > 0){
// si arrojó algún resultado ..
// ejecutar resto de funciones de mysql_result() o mysql_fetch_xxx() para obtener sus resultados.

Como veras .. la primera solución lo hace todo de una .. Eso sí no podras dar un mensaje de error tipo "contraseña no valido" . .y por separado "usuario no valido" o ambos no correcto. Pero .. dicen que cuanto menos "pistas" des sobre el error en la autentificación .. mejor.

Un saludo,
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 17:04.