Foros del Web » Programando para Internet » PHP »

Sistema de Login

Estas en el tema de Sistema de Login en el foro de PHP en Foros del Web. Ok, estoy usando este sistema para sesiones, funciona perfecto siempre y cuando no utililize una direccion e-mail como el nombre asignado para el usuario, en ...
  #1 (permalink)  
Antiguo 18/04/2011, 14:17
 
Fecha de Ingreso: febrero-2011
Mensajes: 64
Antigüedad: 13 años, 1 mes
Puntos: 3
Pregunta Sistema de Login

Ok, estoy usando este sistema para sesiones, funciona perfecto siempre y cuando no utililize una direccion e-mail como el nombre asignado para el usuario, en otras palabras por ejemplo si utilizo "[email protected]" como usuario con su respectiva contraseña no reconoce este nombre de usuario y no me inicia la sesion, de lo contrario si uso solo "juancito" como nombre de usuario con su respectiva contraseña me inicia la sesion perfectamente, estoy seguro q tiene q ver con el @ y los puntos de la direccion de e-mail. Alguien tiene idea porque pasa esto, tiene q ver con el codigo php o la estructura de mi tabla de usuarios en mysql? (no puedo postear el codigo ahora mismo pero lo puedo hacer despues, aunque estoy casi seguro q alguien me puede decir la razon de esto sin postear el codigo)

muchas gracias


Código PHP:

<?php
if (!function_exists("GetSQLValueString")) {
function 
GetSQLValueString($theValue$theType$theDefinedValue ""$theNotDefinedValue ""
{
  if (
PHP_VERSION 6) {
    
$theValue get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  
$theValue function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch (
$theType) {
    case 
"text":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;    
    case 
"long":
    case 
"int":
      
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case 
"double":
      
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case 
"date":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;
    case 
"defined":
      
$theValue = ($theValue != "") ? $theDefinedValue $theNotDefinedValue;
      break;
  }
  return 
$theValue;
}
}
?>
<?php
// *** Validate request to login to this site.
if (!isset($_SESSION)) {
  
session_start();
}

$loginFormAction $_SERVER['PHP_SELF'];
if (isset(
$_GET['accesscheck'])) {
  
$_SESSION['PrevUrl'] = $_GET['accesscheck'];
}

if (isset(
$_POST['usuario'])) {
  
$loginUsername=$_POST['usuario'];
  
$password=$_POST['pass'];
  
$MM_fldUserAuthorization "nivel_acceso";
  
$MM_redirectLoginSuccess "after_login.php";
  
$MM_redirectLoginFailed "login_fallido.php";
  
$MM_redirecttoReferrer true;
  
mysql_select_db($database_IBC$IBC);
      
  
$LoginRS__query=sprintf("SELECT usuario, pass_usuario, nivel_acceso FROM adminis WHERE usuario=%s AND pass_usuario=%s",
  
GetSQLValueString($loginUsername"text"), GetSQLValueString($password"text")); 
   
  
$LoginRS mysql_query($LoginRS__query$IBC) or die(mysql_error());
  
$loginFoundUser mysql_num_rows($LoginRS);
  if (
$loginFoundUser) {
    
    
$loginStrGroup  mysql_result($LoginRS,0,'nivel_acceso');
    
    if (
PHP_VERSION >= 5.1) {session_regenerate_id(true);} else {session_regenerate_id();}
    
//declare two session variables and assign them
    
$_SESSION['MM_Username'] = $loginUsername;
    
$_SESSION['MM_UserGroup'] = $loginStrGroup;          

    if (isset(
$_SESSION['PrevUrl']) && true) {
      
$MM_redirectLoginSuccess $_SESSION['PrevUrl'];    
    }
    
header("Location: " $MM_redirectLoginSuccess );
  }
  else {
    
header("Location: "$MM_redirectLoginFailed );
  }
}
?>
  #2 (permalink)  
Antiguo 18/04/2011, 15:35
 
Fecha de Ingreso: agosto-2010
Mensajes: 100
Antigüedad: 13 años, 7 meses
Puntos: 2
Respuesta: Sistema de Login

No entiendo, con qué hay que iniciar sesión ? con el e-mail o con un nombre de usuario ?. O es una o es otra, pero las dos no.
Es obvio que si el sistema compara un e-mail contra un campo nickname de la bd, a menos que el nickname sea un e-mail, vaya a fallar.
Puede ser que por ahí le estés errando al viscachazo.
O a lo mejor no te entendí bien
  #3 (permalink)  
Antiguo 18/04/2011, 15:39
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 14 años, 11 meses
Puntos: 322
Respuesta: Sistema de Login

Modifica esta linea:
Código PHP:
$LoginRS__query=sprintf("SELECT usuario, pass_usuario, nivel_acceso FROM adminis WHERE usuario=%s AND pass_usuario=%s",
  
GetSQLValueString($loginUsername"text"), GetSQLValueString($password"text")); 
Por:
Código PHP:
$LoginRS__query=sprintf("SELECT usuario, pass_usuario, nivel_acceso FROM adminis WHERE (usuario=%s or usuario=%s) AND pass_usuario=%s",
  
GetSQLValueString($loginUsername"text"), $loginUsernameGetSQLValueString($password"text")); 
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #4 (permalink)  
Antiguo 18/04/2011, 15:52
 
Fecha de Ingreso: febrero-2011
Mensajes: 64
Antigüedad: 13 años, 1 mes
Puntos: 3
Respuesta: Sistema de Login

Cita:
Iniciado por ramiromd Ver Mensaje
No entiendo, con qué hay que iniciar sesión ? con el e-mail o con un nombre de usuario ?. O es una o es otra, pero las dos no.
Es obvio que si el sistema compara un e-mail contra un campo nickname de la bd, a menos que el nickname sea un e-mail, vaya a fallar.
Puede ser que por ahí le estés errando al viscachazo.
O a lo mejor no te entendí bien
Creo q no me entendiste muy bien, el problema que tengo es q cuando guardo en el campo de usuario en mi tabla un nombre con el sgte formato "Juan Perez" funciona bien, pero si en ves de eso uso el formato de e-mail "[email protected]" no me reconoce el campo de mi tabla, espero q me allas entendido, (no soy muy bueno explicando)

gracias
  #5 (permalink)  
Antiguo 18/04/2011, 16:12
 
Fecha de Ingreso: febrero-2011
Mensajes: 64
Antigüedad: 13 años, 1 mes
Puntos: 3
Respuesta: Sistema de Login

Cita:
Iniciado por Sourcegeek Ver Mensaje
Modifica esta linea:
Código PHP:
$LoginRS__query=sprintf("SELECT usuario, pass_usuario, nivel_acceso FROM adminis WHERE usuario=%s AND pass_usuario=%s",
  
GetSQLValueString($loginUsername"text"), GetSQLValueString($password"text")); 
Por:
Código PHP:
$LoginRS__query=sprintf("SELECT usuario, pass_usuario, nivel_acceso FROM adminis WHERE (usuario=%s or usuario=%s) AND pass_usuario=%s",
  
GetSQLValueString($loginUsername"text"), $loginUsernameGetSQLValueString($password"text")); 
si uso tu codigo me da error
  #6 (permalink)  
Antiguo 18/04/2011, 16:17
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 14 años, 11 meses
Puntos: 322
Respuesta: Sistema de Login

Y asi?
Código PHP:
$LoginRS__query=sprintf("SELECT usuario, pass_usuario, nivel_acceso FROM adminis WHERE (usuario=%s or usuario='".$loginUsername."') AND pass_usuario=%s",
  
GetSQLValueString($loginUsername"text"), GetSQLValueString($password"text")); 
Especifica el error por favor :)
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #7 (permalink)  
Antiguo 18/04/2011, 16:41
 
Fecha de Ingreso: febrero-2011
Mensajes: 64
Antigüedad: 13 años, 1 mes
Puntos: 3
Respuesta: Sistema de Login

Cita:
Iniciado por Sourcegeek Ver Mensaje
Y asi?
Código PHP:
$LoginRS__query=sprintf("SELECT usuario, pass_usuario, nivel_acceso FROM adminis WHERE (usuario=%s or usuario='".$loginUsername."') AND pass_usuario=%s",
  
GetSQLValueString($loginUsername"text"), GetSQLValueString($password"text")); 
Especifica el error por favor :)
De esta forma no me da error pero tampoco me reconoce el e-mail.

Cuando uso to primer codigo me da el sqte error:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@hotmail.com' at line 1

lo q tengo en la primera linea es mi coneccion con la base de datos. Estoy completamente seguro q no tiene q ver con la coneccion.

Sino con la funcion "GetSQLValueString"

gracias por estar ayudando
  #8 (permalink)  
Antiguo 18/04/2011, 17:15
 
Fecha de Ingreso: febrero-2011
Mensajes: 64
Antigüedad: 13 años, 1 mes
Puntos: 3
De acuerdo Respuesta: Sistema de Login

Cita:
Iniciado por nuevoconphp Ver Mensaje
De esta forma no me da error pero tampoco me reconoce el e-mail.

Cuando uso to primer codigo me da el sqte error:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@hotmail.com' at line 1

lo q tengo en la primera linea es mi coneccion con la base de datos. Estoy completamente seguro q no tiene q ver con la coneccion.

Sino con la funcion "GetSQLValueString"

gracias por estar ayudando


ya lo arregle, aqui esta para quien le interece:

cambie:

Código HTML:
 $LoginRS__query=sprintf("SELECT usuario, pass_usuario, nivel_acceso FROM adminis WHERE usuario=%s AND pass_usuario=%s",
  GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "text")); 

por:
Código HTML:
 $LoginRS__query=sprintf("SELECT usuario, pass_usuario, nivel_acceso FROM adminis WHERE usuario=%s AND pass_usuario=%s",
  GetSQLValueString($loginUsername, "long"), GetSQLValueString($password, "text")); 


mas arriva estaba el codigo este y no se me habia ocurrido mirarlo y es donde esta la respuesta:

Código HTML:
switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;

gracias a todos por su ayuda una ves mas
  #9 (permalink)  
Antiguo 18/04/2011, 17:19
 
Fecha de Ingreso: febrero-2011
Mensajes: 64
Antigüedad: 13 años, 1 mes
Puntos: 3
Respuesta: Sistema de Login

Cita:
Iniciado por nuevoconphp Ver Mensaje
ya lo arregle, aqui esta para quien le interece:

cambie:

Código HTML:
 $LoginRS__query=sprintf("SELECT usuario, pass_usuario, nivel_acceso FROM adminis WHERE usuario=%s AND pass_usuario=%s",
  GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "text")); 

por:
Código HTML:
 $LoginRS__query=sprintf("SELECT usuario, pass_usuario, nivel_acceso FROM adminis WHERE usuario=%s AND pass_usuario=%s",
  GetSQLValueString($loginUsername, "long"), GetSQLValueString($password, "text")); 


mas arriva estaba el codigo este y no se me habia ocurrido mirarlo y es donde esta la respuesta:

Código HTML:
switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;

gracias a todos por su ayuda una ves mas

OOOHHH; se me olvidaba:

alguien sabe si este cambio que hice compromete la seguridad?

Etiquetas: login, sistema
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 04:03.