Foros del Web » Programando para Internet » PHP »

Ayuda para poder seguir trabajando :(

Estas en el tema de Ayuda para poder seguir trabajando :( en el foro de PHP en Foros del Web. hola a tod@s: Resulta que estoy haciendo una pagina web con php y mysql.Ahora estoy haciendo el sistema de autentificacion de usuarios en donde en ...
  #1 (permalink)  
Antiguo 05/05/2004, 17:34
 
Fecha de Ingreso: octubre-2003
Mensajes: 146
Antigüedad: 20 años, 6 meses
Puntos: 1
Ayuda para poder seguir trabajando :(

hola a tod@s:
Resulta que estoy haciendo una pagina web con php y mysql.Ahora estoy haciendo el sistema de autentificacion de usuarios en donde en index.php tengo 2 campos de registro,el login y el password que los paso a traves del metodo post a otro archivo php Yo he insertado un usuario mediante el phpmyadmin para probar el funcionamiento de la pagina.La password la he encriptado a traves de md5.El codigo que recoge las variables login y password es:


// Chequeamos si se está autentificandose un usuario por medio del formulario
if (isset($_POST['login_form']) && isset($_POST['password_form'])) {
$login = $_POST["login_form"];
// Encriptamos el password en formato md5 irreversible.
$password = md5($_POST["password_form"]);

if (($login == "") || ($password == "")) {
header("Location: http://localhost/index.php");
exit;
}

// Conexión base de datos
// Si no se puede conectar a la BD mostramos mensaje de error
$db_name = "proyecto";
$table_name = "personal";

$connection = mysql_connect("localhost","root","") or die(header("Location: $redir?error_login=0"));

$db = mysql_select_db($db_name, $connection)
or die("No se puede seleccionar la base de datos especificada");

//Sentencia SQL para buscar un usuario con esos datos
$sql = "SELECT * FROM $table_name
WHERE usuario = '$login'
";
//Ejecuto la sentencia
$result = mysql_query($sql)
or die (header("Location: $redir?error_login=1"));

$num = mysql_num_rows($result);

if ($num != 0) {
// Almacenamos los datos del Usuario en un array para empezar a chequear
$usuario_datos = mysql_fetch_array($result);
// Liberamos la memoria usada por la consulta, ya que tenemos estos datos en el Array.
mysql_free_result($result);
// Cerramos la Base de dtos.
mysql_close($connection);

// Chequeamos el nombre del usuario otra vez contrastándolo con la BD
// esta vez sin barras invertidas, etc ...
// Si no es correcto, salimos del script y redireccionamos a la
// página principal
if ($login != $usuario_datos['usuario']) {
header("Location: $redir?error_login=4");
exit;
}

// Si el password no es correcto ..
// salimos del script y redireccinamos hacia la página principal
if ($password != $usuario_datos['pass']) {
header("Location: $redir?error_login=3");
exit;
}

// En este punto, el usuario ya esta validado.
// Grabamos los datos del usuario en una sesión
// le damos un nombre a la sesion.
session_name("autentificado");
// inicia sesiones
session_start();

// Decimos al navegador que no "cachee" esta página.
session_cache_limiter('nocache,private');

// Asignamos variables de sesión con datos del Usuario para el uso en el
// resto de páginas autentificadas.

// definimos usuarios_id como identificador del usuario en nuestra BD
$_SESSION['usuario_id']=$usuario_datos['id'];
//definimos usuario_login como el nombre del usuario en nuestra BD
$_SESSION['usuario_login']=$usuario_datos['usuario'];
//definimos usuario_password con el password del usuario de la sesión actual (formato md5 encriptado)
$_SESSION['usuario_password']=$usuario_datos['pass'];


// Hacemos una llamada a si mismo (script) para que queden disponibles
// las variables de session en el array asociado $HTTP_...
$pag=$_SERVER['PHP_SELF'];
header("Location: $pag?");
exit;
} else {
// si no esta el nombre de usuario en la BD o el password ..
// se devuelve a pagina q lo llamo con error
header("Location: $redir?error_login=2");
exit;
}
} else {
// -------- Chequear si existe sesión -------

// usamos la sesion de nombre definido.
session_name("autentificado");
// Iniciamos el uso de sesiones
session_start();

// Chequeamos si están creadas las variables de sesión de identificación del usuario,
// El caso más común es el de una vez "matado" la sesión se intenta volver hacia atrás
// con el navegador.

if (!isset($_SESSION['usuario_login']) && !isset($_SESSION['usuario_password'])){
// Borramos la sesion creada por el inicio de session anterior
session_destroy();
die ("Error cod.: 2 - Acceso incorrecto!");
exit;
}
}
?>


Supuestamente este codigo deberia de funcionar bien pero me sale error,password no valida.He probado la combinacion de poner a la hora de autentificarme la password encriptada copiada del phpmyadmin para comprobar si funcionaba y si!!! me funciona!!! asi que el problema esta a la hora de encriptar la password introducida en el formulario de entrada $password = md5($_POST["password_form"]); que no coincide con la que esta en la base de datos,no se porque,lo mismo es que hacen una codificacion distinta en el phpmyadmin y el php despues,no se que pasara.O seguramente haya algun fallo por comillas o algo.Bueno espero que alguien me pueda ayudar.Muchas gracias anticipidas.Un saludo :)
  #2 (permalink)  
Antiguo 05/05/2004, 17:55
Avatar de lado2mx
Colaborador
 
Fecha de Ingreso: agosto-2001
Ubicación: Veracruz
Mensajes: 3.720
Antigüedad: 22 años, 8 meses
Puntos: 9
Si quieres, deja de usar el md5; o usa una comilla simple en vez de la clásica comilla, en caso del password, posiblemente sea un mal arrastre de la variable a travez de todo.
  #3 (permalink)  
Antiguo 06/05/2004, 06:02
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
mm .. me suena mucho ese código xDDD...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #4 (permalink)  
Antiguo 06/05/2004, 06:24
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Te toca hacer echos. Haz un echo del md5() del campo del formulario y comparalo con el valor del campo de la tabla. Si son distintos, pues a investigar por que.

Un para de detalles:

- md5('contraseña') es distinto de md5('CONTRASEÑA')

- Y para PHP 'abcd' es distinto de 'ABCD' (para comparaciones ==).

Saludos.

PD: Personalmente no usaria un die(header("location")). Y haria la comprobacion del password en la consulta SQL, sin diferenciar si el error es culpa del usuario o del password.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 06/05/2004, 06:56
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
PD: Personalmente no usaria un die(header("location")). Y haria la comprobacion del password en la consulta SQL, sin diferenciar si el error es culpa del usuario o del password.
Ahora yo tambien opino así .. pero mi "Autentificator" data ya del 17/04/2002 y .. bueno, vamos aprendiendo y tomando experiencia con el tiempo xDD.

Un saludo,

PD: pirrilon .. por qué no revisas el original? que tiene su documentación y comentarios al respecto:
http://php.cluster-web.com/autentificator/
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 06/05/2004, 10:25
 
Fecha de Ingreso: octubre-2003
Mensajes: 146
Antigüedad: 20 años, 6 meses
Puntos: 1
Solucionado

Gracias chicos por aportarme soluciones pero al final la solucion estaba en que tenia puesta la pass como varchar(15) y ese era el fallo.Ahora la he puesto a varchar(80) y me funciona correctamente.Muchas gracias a todos por vuestra ayuda.Nos veremos por aqui seguramente.Un saludo
  #7 (permalink)  
Antiguo 06/05/2004, 12:54
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Que desperdicio de sitio. Una cadena generada por md5 siempre va a ser de 32 caracteres de longitud, ni uno mas ni uno menos. Si la declaras como char(32) optimizaras la tabla.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
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 05:40.