Foros del Web » Programando para Internet » PHP »

Problemas con sistema de login

Estas en el tema de Problemas con sistema de login en el foro de PHP en Foros del Web. Buenas... Tengo un sistema de registro y login de usuarios pero no me funciona, te puede registrar etc... pero cuando intento loguearme... zahs, no funciona. ...
  #1 (permalink)  
Antiguo 03/12/2006, 01:28
 
Fecha de Ingreso: diciembre-2004
Mensajes: 29
Antigüedad: 19 años, 4 meses
Puntos: 0
Problemas con sistema de login

Buenas...

Tengo un sistema de registro y login de usuarios pero no me funciona, te puede registrar etc... pero cuando intento loguearme... zahs, no funciona.

Os muestro los códigos:

Database setup

CREATE TABLE `users` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(30) NOT NULL default '',
`password` varchar(255) NOT NULL default '',
`email` varchar(40) NOT NULL default '',
`msn` varchar(250) NOT NULL default 'Not Specified',
`aim` varchar(250) NOT NULL default 'Not Specified',
`location` varchar(36) NOT NULL default 'Not Specified',
PRIMARY KEY (`id`)
) TYPE=MyISAM;

config.php

Código PHP:
<?
   ob_start
(); // allows you to use cookies
   
$conn mysql_connect("***.powweb.com","dcwebusers","***");
   
mysql_select_db(dcwebusers) or die(mysql_error());
   
//fill in the above lines where there are capital letters.
   
$logged MYSQL_QUERY("SELECT * from users WHERE id='$_COOKIE[id]'");
   
$logged mysql_fetch_array($logged);
   
//the above lines get the user's information from the database.
?>
register.php

Código PHP:
<?php
ob_start
();
// allows you to use cookies
include("config.php");
//gets the config page
if ($_POST[register]) {
// the above line checks to see if the html form has been submitted
$username $_POST[username];
$password $_POST[pass];
$cpassword $_POST[cpass];
$email $_POST[emai1];
//the above lines set variables with the user submitted information
if($username==NULL|$password==NULL|$cpassword==NULL|$email==NULL) {
//checks to make sure no fields were left blank
echo "Un campo fue dejado en blanco.";
}else{
//none were left blank!  We continue...
if($password != $cpassword) {
// the passwords are not the same!  
echo "Las contraseñas no coinciden";
}else{
// the passwords are the same!  we continue...
$password md5($password);
// encrypts the password
$checkname mysql_query("SELECT username FROM users WHERE username='$username'");
$checknamemysql_num_rows($checkname);
$checkemail mysql_query("SELECT email FROM users WHERE email='$email'");
$checkemail mysql_num_rows($checkemail);
if (
$checkemail>0|$checkname>0) {
// oops...someone has already registered with that username or email!
echo "El nombre de usuario (nickname) o el correo electrónico ya están siendo utilizados por otro usuario.";
}else{
// noone is using that email or username!  We continue...
$username htmlspecialchars($username);
$password htmlspecialchars($password);
$email htmlspecialchars($email);
// the above lines make it so that there is no html in the user submitted information.
//Everything seems good, lets insert.
$query mysql_query("INSERT INTO users (username, password, email) VALUES('$username','$password','$email')");
// inserts the information into the database.
echo "Tu registro se ha efectuado satisfactoriamente";
}
}
}
}
else
{
// the form has not been submitted...so now we display it.
echo ("
<center>
<form method=\"POST\">
Nombre de usuario (nickname): <input type=\"text\" size=\"15\" maxlength=\"25\" name=\"username\"><br />
Contraseña: <input type=\"password\" size=\"15\" maxlength=\"25\" name=\"pass\"><br />
Repetir Contraseña: <input type=\"password\" size=\"15\" maxlength=\"25\" name=\"cpass\"><br />
E-mail: <input type=\"text\" size=\"15\" maxlength=\"75\" name=\"emai1\"><br />
<input name=\"register\" type=\"submit\" value=\"Registrar usuario\">
</form>
</center>
"
);
}
?>
login.php

Código PHP:
<?
oB_start
();
// allows you to use cookies.
include("config.php");
if (!
$logged[username])
{
if (!
$_POST[login])
{
echo(
"
<center><form method=\"POST\">
<table>
<tr>
<td align=\"right\">
Nombre de usuario (nickname): <input type=\"text\" size=\"15\" maxlength=\"25\" name=\"username\">
</td>
</tr>
<tr>
<td align=\"right\">
Contraseña: <input type=\"password\" size=\"15\" maxlength=\"25\" name=\"password\">
</td></tr><tr>
<td align=\"center\">
<input type=\"submit\" name=\"login\" value=\"Conectar\">
</td></tr><tr>
<td align=\"center\">
<a href=\"register.php\">Registrarse</a>
</td></tr></table></form></center>"
);
}
if (
$_POST[login]) {
// the form has been submitted.  We continue...
$username=$_POST['username'];
$password md5($_POST[password]);
// the above lines set variables with the submitted information.  
$info mysql_query("SELECT * FROM users WHERE username = '$username'") or die(mysql_error());
$data mysql_fetch_array($info);
if(
$data[password] != $password) {
// the password was not the user's password!
echo "Nombre de usuario o contraseña incorrectas";
}else{
// the password was right!
$query mysql_query("SELECT * FROM users WHERE username = '$username'") or die(mysql_error());
$user mysql_fetch_array($query);
// gets the user's information
setcookie("id"$user[id],time()+(60*60*24*5), "/""");
setcookie("pass"$user[password],time()+(60*60*24*5), "/""");
// the above lines set 2 cookies. 1 with the user's id and another with his/her password.  
echo ("<meta http-equiv=\"Refresh\" content=\"0; URL=*****\"/>Gracias por conectarte! Ahora serás redireccionado a la página principal");
// modify the above line...add in your site url instead of yoursite.com
}
}
}
else
{
// we now display the user controls.
echo ("<center>Bienvenido <b>$logged[username]</b><br /></center>
- <a href=\"editprofile.php\">Editar Perfil</a><br />
- <a href=\"members.php\">Lista de Miembros</a><br />
- <a href=\"logout.php\">Salir</a>"
);
}
?>
editprofile.php

Código PHP:
<?
ob_start
();
include(
"config.php");
if (
$logged[username])
{
// the user is logged in!  We continue...
if (!$_POST[update])
{
// the form hasn't been submitted.  We continue...
$profile mysql_query("SELECT * from users where username = '$logged[username]'");
$profile mysql_fetch_array($profile);
// the above lines get the information so that it can be displayed in the html form.
echo("
<center><form method=\"POST\">
<table width=\"100%\">
<tr>
<td align=\"right\" width=\"25%\">
Localidad
</td>
<td align=\"left\">
<input type=\"text\" size=\"25\" maxlength=\"25\" name=\"locate\" value=\"$profile[location]\"></td>
</tr>
<tr>
<td align=\"right\" width=\"25%\">
MSN Messenger
</td>
<td align=\"left\">
<input size=\"25\" name=\"msn\" value=\"$profile[msn]\"></td>
</tr>
<tr>
<td align=\"right\" width=\"25%\">
AOL Messenger</td>
<td align=\"left\">
<input size=\"25\" name=\"aim\"  value=\"$profile[aim]\"></td>
</tr>
<tr>
<td align=\"right\" width=\"25%\">
E-mail</td>
<td align=\"left\">
<input size=\"25\"  name=\"email\" value=\"$profile[email]\"></td>
</tr>
<tr>
<td align=\"center\">
</td>
<td align=\"left\">
<input type=\"submit\" name=\"update\" value=\"Actualizar perfil\"></td>
</tr>
</table>
</form>
</center>"
);
}
else
{
$email htmlspecialchars($_POST[email]);
$aim htmlspecialchars($_POST[aim]);
$msn htmlspecialchars($_POST[msn]);
$locate htmlspecialchars($_POST[locate]);
// the above lines get rid of all html.
echo ("Tu perfil ha sido actualizado!");
$update mysql_query("Update users set email = '$email',
msn = '$msn', aim = '$aim', location = '$locate' where username = '$logged[username]'"
);
// updates the information in the database.
}
}
else
{
// They aren't logged in!
echo ("<a href=\"login.php\">Conectarme</a>");
}
?>
members.php

Código PHP:
<?
ob_start
();
include(
"config.php");
if (!
$_GET[user])
{
$getuser mysql_query("SELECT * from users order by id asc");
while (
$user mysql_fetch_array($getuser))
{
// gets all the users information.
echo ("<a href=\"members.php?user=$user[username]\">$user[username]</a><br />\n");
// links to a page to view the user's profile.
}
}
ELSE
{
$getuser mysql_query("SELECT * from users where username = '$_GET[user]'");
$usernum mysql_num_rows($getuser);
if (
$usernum == 0)
{
echo (
"Usuario no encontrado");
}
else
{
$profile mysql_fetch_array($getuser);
echo (
"<center><b>Perfil de $profile[username]</b><br /></center>
MSN Messenger: $profile[msn]<br />
AIM Messebger: $profile[aim]<br />
Localidad: $profile[location]<br />
E-mail: $profile[email]"
);
// in the above code, we display the user's information.
}
}
?>
logout.php

Código PHP:
<?
ob_start
();
setcookie("id"2132421,time()+(60*60*24*5), "/""");
setcookie("pass"loggedout,time()+(60*60*24*5), "/""");
echo (
"Has salido de la cuenta!");
?>
código para proteger páginas

Código PHP:
<?
ob_start
();
include(
"config.php");
?>
código para saber si estás conectado - para las pags de miembros registrados únicamente -

Código PHP:
<?
   ob_start
();
   include(
"config.php");
   if (
$logged[username])
   {
      echo(
"You are logged in");
   }
   else
   {
      echo(
"You are not logged in");
   }
?>
------------------------------------

Luego, este script tiene una serie de modificaciones q permite enviar y recibir MP.. etc pero eso para mas adelante, ahora el problema es este, que no me deja loguearme

Saludos.
  #2 (permalink)  
Antiguo 03/12/2006, 06:46
Avatar de vb2005  
Fecha de Ingreso: noviembre-2005
Ubicación: Paderborn - Alemania
Mensajes: 566
Antigüedad: 18 años, 5 meses
Puntos: 24
de donde lo descargaste? pasame el link
  #3 (permalink)  
Antiguo 03/12/2006, 06:59
 
Fecha de Ingreso: diciembre-2004
Mensajes: 29
Antigüedad: 19 años, 4 meses
Puntos: 0
Digo, este tipo de comentarios sobran... vengo pidiendo algo de ayuda y tu lo único q quieres es el código entero... xD
  #4 (permalink)  
Antiguo 03/12/2006, 07:36
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 19 años, 2 meses
Puntos: 20
Por qué no coges usuario y contraseña a la vez?


Es decir, esto :
Código PHP:
// the above lines set variables with the submitted information.  
$info mysql_query("SELECT * FROM users WHERE username = '$username'") or die(mysql_error());
$data mysql_fetch_array($info);
if(
$data[password] != $password) {
// the password was not the user's password!
echo "Nombre de usuario o contraseña incorrectas";
}else{
// the password was right!
$query mysql_query("SELECT * FROM users WHERE username = '$username'") or die(mysql_error());
$user mysql_fetch_array($query); 
Por esto otro:

Código PHP:
// the above lines set variables with the submitted information.  
$info mysql_query("SELECT * FROM users WHERE username = '$username' and password='$password'") or die(mysql_error());
if (
mysql_num_rows($info) == 0) {
// the password was not the user's password!
echo "Nombre de usuario o contraseña incorrectas";
}else{
// the password was right!
setcookie("id"$user[id],time()+(60*60*24*5), "/""");
setcookie("pass"$user[password],time()+(60*60*24*5), "/"""); 
Así busca directamente usuarios que a la vez coincida con AMBOS campos; usuario y contraseña. Aunque no sé si eso solucionará tu problema.
  #5 (permalink)  
Antiguo 03/12/2006, 08:56
 
Fecha de Ingreso: diciembre-2004
Mensajes: 29
Antigüedad: 19 años, 4 meses
Puntos: 0
Pues parece ser que eso no es pues sigue sin funcionarme... no sé cual puede ser el fallo, me deja loguearme, me reconoce pues sale el mensaje de 'Gracias por conectarte...etc' pero cuando pincho en 'Editar perfil' me sale el mensaje de 'Cnoectarme', vamos, que no estoy conectado.
  #6 (permalink)  
Antiguo 03/12/2006, 09:12
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 19 años, 2 meses
Puntos: 20
Entonces va a ser cosa de las cookies... prueba a crearlas así:

Código PHP:
setcookie("id"$username);
setcookie("pass"$password); 
Suerte
  #7 (permalink)  
Antiguo 03/12/2006, 09:28
 
Fecha de Ingreso: diciembre-2004
Mensajes: 29
Antigüedad: 19 años, 4 meses
Puntos: 0
Nada, tampoco... muchas gracias de todas maneras david MG ^^
  #8 (permalink)  
Antiguo 03/12/2006, 09:49
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 19 años, 2 meses
Puntos: 20
A lo mejor es cosa tuya. Si está la web subida en algún sitio podrías poner un link para verla (y una cuenta para probar )

saludos
  #9 (permalink)  
Antiguo 03/12/2006, 09:57
 
Fecha de Ingreso: noviembre-2006
Mensajes: 437
Antigüedad: 17 años, 5 meses
Puntos: 3
hola! He estado mirando tu codigo un poco por encima y me ha sorprendido esto:
$logged = MYSQL_QUERY("SELECT * from users WHERE id='$_COOKIE[id]'");
$logged = mysql_fetch_array($logged);

Estas guardando el resultado de la consulta en $logged y luego usas la misma variable para guardarlo en un array. Creo que tendrias que utilizar otra variable,por ejemplo:
$query = MYSQL_QUERY("SELECT * from users WHERE id='$_COOKIE[id]'");
$logged = mysql_fetch_array($query);

Seguiré mirando tu codigo y haber si descubro donde puede estar el error. De momento te recomiendo que hagas lo que te he comentado.
Un saludo
  #10 (permalink)  
Antiguo 03/12/2006, 15:46
 
Fecha de Ingreso: diciembre-2004
Mensajes: 29
Antigüedad: 19 años, 4 meses
Puntos: 0
Buenas...

Gracias komodo, veremos si conseguimos hacer funcionar el script ^^
  #11 (permalink)  
Antiguo 03/12/2006, 17:29
 
Fecha de Ingreso: noviembre-2006
Mensajes: 437
Antigüedad: 17 años, 5 meses
Puntos: 3
Te pasa solo en la pagina de editar el perfil o te pasa con todas que no reconoce si estas logueado? He visto que en el codigo de saber si estas conectado:
<?
ob_start();
include("config.php");
if ($logged[username])
{
echo("You are logged in");
}
else
{
echo("You are not logged in");
}
?>
En -if ($logged[username])- estas cogiendo el valor del username del array $logged que lo habias creado en otra pagina. Tendrias que pasar la variable a traves de una variable de session que la crearias a la hora de loguearse el usuario o tambien la opcion de pasarla por url.
El codigo utilizando la variable de sesion quedaria asi:
<?
ob_start();
include("config.php");
if ($_SESSION['username]')
{
echo("You are logged in");
}
else
{
echo("You are not logged in");
}
?>

El codigo para pasar el valor por url seria asi:
<?
ob_start();
include("config.php");
if ($_GET['username]')
{
echo("You are logged in");
}
else
{
echo("You are not logged in");
}
?>

Espero que me hayas podido entender, qualquier duda posteala y haber si conseguimos sacar adelante este problemilla.
Un saludo!
  #12 (permalink)  
Antiguo 03/12/2006, 17:32
 
Fecha de Ingreso: noviembre-2006
Mensajes: 437
Antigüedad: 17 años, 5 meses
Puntos: 3
Perdon hay un error a la hora de escribirlo.
És asi : if ($_SESSION['username']) y no asi: if ($_SESSION['username]')

He tenido un pequeño despiste con la comilla.
Un saludo
  #13 (permalink)  
Antiguo 03/12/2006, 17:35
Avatar de g05l21  
Fecha de Ingreso: mayo-2006
Mensajes: 76
Antigüedad: 17 años, 10 meses
Puntos: 1
Una pregunta Sengokushi. Por qué no trabajas con sesiones? Precisamente para lo que tú necesitas es más seguro usar $_SESSION que $_COOKIE ya que mantienes la información del lado del servidor sin dejar información "sensible" en el equipo del usuario, además de no tener que controlar, por ejemplo, el tiempo de inactivida. Y sobretodo, si por ejemplo, un usuario tiene las Cookies deshabilitadas por defecto, nunca podrá entrar en tu web.

A parte de eso, creo que hay una mala explicación de ob_start ya que según pones en el código es para poder usar las cookies, sin embargo, según Php.net sirve para habilitar el uso de búferes de salida.

Y como último, creo que esta url te puede ayudar bastante a encontrar los posibles errores del código:
http://es2.php.net/manual/es/features.cookies.php

Un saludo y a ver si lo sacas.
__________________
.-. GeL/T0 .-. Quieres saber mas de mi? lee mi blog: http://g05l21.net
  #14 (permalink)  
Antiguo 04/12/2006, 11:47
Avatar de vb2005  
Fecha de Ingreso: noviembre-2005
Ubicación: Paderborn - Alemania
Mensajes: 566
Antigüedad: 18 años, 5 meses
Puntos: 24
donde te bajaste el script, porque me gustaría tenerlo...
  #15 (permalink)  
Antiguo 08/12/2006, 23:46
Avatar de ginitofl  
Fecha de Ingreso: diciembre-2006
Ubicación: Lima Perú
Mensajes: 349
Antigüedad: 17 años, 4 meses
Puntos: 22
Re: Problemas con sistema de login

Puedes ver un ejemplo aqui en mi web usando sessiones lo cual te lo recomiendo por ser mejr y no necesitas si el visitante de tu pagina tiene o no activado las cookies de su navegador lo cual resulta en muchos casos un problema y la myoria no lo sabe espero te de una idea de lo que quieres hacer: heroes.webcindario.com
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:23.