Foros del Web » Programando para Internet » PHP »

Problemas con sistema de usuarios

Estas en el tema de Problemas con sistema de usuarios en el foro de PHP en Foros del Web. ¡Hola!, Es mi primer post, pidiendo ayuda, dado que no soy mucho de PHP. Yo soy más de HTML y CSS Veréis, monté un sistema ...
  #1 (permalink)  
Antiguo 18/08/2011, 06:22
 
Fecha de Ingreso: mayo-2011
Mensajes: 38
Antigüedad: 12 años, 11 meses
Puntos: 1
Problemas con sistema de usuarios

¡Hola!,

Es mi primer post, pidiendo ayuda, dado que no soy mucho de PHP. Yo soy más de HTML y CSS

Veréis, monté un sistema de usuarios para mi página web, y no logro hacer lo que me interesa. Quiero hacer, por ejemplo, que cuando el usuario esté logueado no se le muestre el formulario de inicio de sesión. O sino, un menú donde ponga "Iniciar sesión", "Registrarse", etc. para los no logueados, y al loguearse que salga "Perfil", "Cerrar Sesión", etc. ¿Sabéis? Es decir, distinto contenido para logueados y no logueados.

Después, quiero que la sesión dure más o que al abrir una subpágina de mi web la sesión siga abierta.

Y vuelvo a repetir que no sé PHP, que si me comentáis una idea para hacer esto no la sabré llevar a cabo. Al menos os puedo decir que no me han funcionado los códigos que tenían las funciones if y else.

Gracias de antemano,
¡Saludos!
  #2 (permalink)  
Antiguo 18/08/2011, 06:33
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Problemas con sistema de usuarios

Cita:
Iniciado por ignaoa Ver Mensaje
Y vuelvo a repetir que no sé PHP, que si me comentáis una idea para hacer esto no la sabré llevar a cabo. Al menos os puedo decir que no me han funcionado los códigos que tenían las funciones if y else.
Pues entonces nada que decir, no? Porque si no lo vas a saber hacer, para que pides ayuda?

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #3 (permalink)  
Antiguo 18/08/2011, 07:37
 
Fecha de Ingreso: mayo-2011
Mensajes: 38
Antigüedad: 12 años, 11 meses
Puntos: 1
Respuesta: Problemas con sistema de usuarios

Vamos a ver, si pido ayuda y no lo sé hacer es para saber hacerlo... -.-'

No soy veterano en este foro, pero sé que tú no me das buenas respuestas, no me das soluciones.

También aceptaría ideas, ya me las arreglaré...

Gracias otra vez,
¡Saludos!
  #4 (permalink)  
Antiguo 18/08/2011, 07:48
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Problemas con sistema de usuarios

Si no sabes de PHP, pero dices que puedes adaptar scripts, te recomiendo veas los Aportes de Foros del Web, es probable que entre ellos puedas sacar ideas de varios de ellos para realizar lo que quieres.

Aunque si estudias un poco de PHP podrías realizarlo de una forma rápida y sencilla, solo tienes que conocer de sesiones un poco y como se transmiten, en el Manual de PHP puedes ver las opciones de configuración para las sesiones.

Saludos.
  #5 (permalink)  
Antiguo 18/08/2011, 07:55
 
Fecha de Ingreso: mayo-2011
Mensajes: 38
Antigüedad: 12 años, 11 meses
Puntos: 1
Respuesta: Problemas con sistema de usuarios

Muchas gracias, GatorV

Me ha surgido una pregunta. Más adelante querré implantar un pequeño foro en mi página web, con phpBB, por ejemplo. ¿Podré usar la DB del foro para la web? Es decir, si podré hacer que los usuarios, con sólamente registrarse en el foro puedan acceder a ambas partes: web y foro. Y, ¿qué script es mejor para la creación de foros? ¿phpBB está bien? ¿O SMF? ¿Alguno más?

Gracias nuevamente,
¡Saludos!
  #6 (permalink)  
Antiguo 18/08/2011, 08:50
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Problemas con sistema de usuarios

En ese caso es más complicado y debes de ver con el foro que desees implementar, en el foro de Aplicaciones Prefabricadas te pueden orientar más en eso. Pero debes de verificar que el foro que desees implementar posea alguna especie de API que te permita comunicar y poder ver los usuarios de tu foro en la web.

Yo te recomendaría si lo que quieres es ese camino entonces no implementes un sistema de registro aparte, si no que uses directamente el foro que quieras usar ya que migrar en un futuro te constará más trabajo.

Saludos.
  #7 (permalink)  
Antiguo 18/08/2011, 09:24
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Problemas con sistema de usuarios

Siento mucho que mi opinión no te haya agradado, pero qué esperas que piense si pones esta frase?
Cita:
Iniciado por ignaoa Ver Mensaje
Y vuelvo a repetir que no sé PHP, que si me comentáis una idea para hacer esto no la sabré llevar a cabo.
Si la gente viene con código, le puedo echar una mano e incluso corregírselo. Si tú vienes con 0 código, pero con un sistema complejo a montar y encima me dices que no te dé una idea, porque no la vas a saber llevar a cabo. Pues qué pienso yo? Qué pensarías tú? Si vienes sin código, lo único que te puedo dar es una idea, es lo que te ha dado GatorV, una idea.

Un saludo.

PD: no había visto tu notificación en el karma negativo. Quién eres tú para llamarme antipático? Acaso me conoces o sabes cómo soy? En fin... lo dejaremos aquí, paso de esto.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?

Última edición por vgonga1986; 18/08/2011 a las 09:52 Razón: Añadir PD
  #8 (permalink)  
Antiguo 18/08/2011, 12:23
 
Fecha de Ingreso: mayo-2011
Mensajes: 38
Antigüedad: 12 años, 11 meses
Puntos: 1
Respuesta: Problemas con sistema de usuarios

Cita:
Iniciado por vgonga1986 Ver Mensaje
PD: no había visto tu notificación en el karma negativo. Quién eres tú para llamarme antipático? Acaso me conoces o sabes cómo soy? En fin... lo dejaremos aquí, paso de esto.
Alguien que por ver tu respuesta ha decidido pensar esto. Sí que tengo código, varios con los que he intentado.

Igual mi idea no es hacer el foro, sino algún lugar de noticias, novedades, eventos, etc. Eso lo podría hacer sin la necesidad de un foro, y entonces podría usar el sistema de usuarios.

Me he encontrado con varios códigos que son con if y else pero que no me han funcionado, supongo que no hace falta que os facilite el código. Es un simple <?php después el if + algo más (que no recuerdo porque en los varios códigos era diferente) y después el else (cerrado todo el código por ?>. He probado con echo + el contenido que deseaba mostrar (con comillas, claro xD) y también sin echo. Pero sólo en alguna ocasión, no me acuerdo cuál de los varios códigos era (repito, todos con la condición if y else, pero diferentes entre ellos), he conseguido que se viera sólo el else. El if no. Y en los demás no se veía nada.

¿Cómo puedo poner el if para que me funcione?

Gracias,
¡Saludos!

PD: Te puntuaré como positivo el último mensaje, porque me agradó, pero sigue sin gustarme tu primera respuesta.
  #9 (permalink)  
Antiguo 18/08/2011, 12:42
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Problemas con sistema de usuarios

Sigues cayendo en el mismo error, si no muestras código no te puedo ayudar de ninguna manera. A mí no me dice nada que me digas que has puesto un if con algo y un else y sólo te salía el else. Es que precisamente es ese algo lo que me diría a mí si está mal o no y por dónde guiarte.

Vamos a ver, te explico, que tengo un ratillo libre ahora mismo. Para montar un sistema de usuarios te tienes que apoyar en la sesión (variable $_SESSION) y la idea es sencilla:
1) Tienes una base de datos con una tabla (pongamos Usuario) en la que almacenas el nick y la password.
2) Cada vez que registras un usuario nuevo añades a dicha tabla su nick y su password. También es preferible tener un identificador que vaya aumentando sólo.
3) Cada vez que un usuario intenta acceder a tu aplicación, rellena el usuario y el password, buscas en la base de datos si los datos son correctos.
4) Si los datos son correctos, inicias una sesión y almacenas algún dato para saber que el usuario está registrado (por ejemplo, el id).
5) En cada página, compruebas si el usuario inició sesión. Si la inició, le pones los datos que quieras enseñarle, si no la inició, le mandas a que lo haga.

Y cómo es todo esto con código?
A) El tema de la base de datos supongo que ya más o menos sabras, te dejo montarlo.
B) Para insertar usuario simplemente hay que hacer INSERT en la base de datos (puedes hacerlo directamente en la base de datos o tabmién desde PHP).
C) Para que el usuario rellene sus datos montas un formulario que los pida. En la validación del formulario haces un SELECT a la base de datos con los datos que el usuario rellenó, si devuelve algún registro es que eran correctos, si no devuelve ningún registro es que no eran válidos.
D) Para iniciar la sesión, tienes que utilizar session_start y para almacenar el valor del id usas $_SESSION['id'] = $id; Con esto, en todas las págianas podrás acceder a la sesión y comprobar si está o no iniciada.
E) Finalmente, para saber si el usuario inició o no la sesión, tendrás que tener un código como el que sigue al principio de cada página:
Código PHP:
Ver original
  1. <?php
  2. if (isset($_SESSION['id'])) {
  3.    // Aquí sabes que el usuario está registrado, pones el código que quieras que vea.
  4. } else {
  5.    // Aquí sabes que el usuario NO está registrado, tomas las acciones que quieras (enviarlo al login, por ejemplo).
  6. }
  7. ?>

Más que eso no te puedo contar, porque ya cada sistema es diferente y lo podrás adaptar a lo que tú tengas, pero eso es lo básico y la idea, si es que la quieres.

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?

Última edición por vgonga1986; 18/08/2011 a las 12:48 Razón: Había puesto "callendo" y me dolían los hogos
  #10 (permalink)  
Antiguo 18/08/2011, 12:50
 
Fecha de Ingreso: agosto-2011
Mensajes: 1
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: Problemas con sistema de usuarios

Te voy a dar un ejemplo muy facil de como se hace esto

creas tu formulario en html con los campos "user" y "pass", usas el metodo que quieras para enviarlo, yo uso el "GET", lo envias al archivo que te voy a poner abajo.

Código PHP:
<?php
session_start
();
If (isset(
$_GET('user'))){$_SESSION['logeado'] = "ok"}
?>


En donde quieras saber si esta logeao o no
Código PHP:
<?php
session_start
();

if(
$_SESSION['logeado'] == "ok"){ echo "lo que quieras imprimir si ya esta logeado"}else{ echo "lo que quieras imprimir si no esta logeado"}
?>

investiga un poco en el manual de php sobre las funciones, de lo contrario te espera todo un calvario
  #11 (permalink)  
Antiguo 18/08/2011, 12:59
 
Fecha de Ingreso: mayo-2011
Mensajes: 38
Antigüedad: 12 años, 11 meses
Puntos: 1
Respuesta: Problemas con sistema de usuarios

Hola, muchas gracias :)

Mira, ahora mismo la página que he creado para hacer la prueba de si funcionaba me sale en blanco. Igual le falta algo al código:
Código PHP:
Ver original
  1. <?php
  2.     if (isset($_SESSION['id'])) {
  3.        // Aquí sabes que el usuario está registrado, pones el código que quieras que vea.
  4.        Hola
  5.     } else {
  6.        // Aquí sabes que el usuario NO está registrado, tomas las acciones que quieras (enviarlo al login, por ejemplo).
  7.        Adiós
  8.     }
  9.     ?>

Te explico. Tengo un formulario "login.html" que al rellenarse lleva a "login.php". Eso va bien porque al no coincidir los datos introducidos con los de la base de datos, te lo comunica y te hace volver a introducirlos. Pero después he creado "login2.php", que es la página de prueba, para comprobar si funciona esto. Eso ya está en blanco. Si vuelvo a entrar a login.php me dice que no existe usuario o contraseña (vaya, el mensaje de que no están bien los datos), y entiendo que es porque la sesión ha caducado o algo...

El código de "login.php" es el siguiente:
Código PHP:
Ver original
  1. <?php
  2.  
  3. include("config.php");
  4.  
  5. // connect to the mysql server
  6. $link = mysql_connect($server, $db_user, $db_pass)
  7. or die ("Could not connect to mysql because ".mysql_error());
  8.  
  9. // select the database
  10. mysql_select_db($database)
  11. or die ("Could not select database because ".mysql_error());
  12.  
  13. $match = "select id from $table where username = '".$_POST['username']."'
  14. and password = '".$_POST['password']."';";
  15.  
  16. $qry = mysql_query($match)
  17. or die ("Could not match data because ".mysql_error());
  18. $num_rows = mysql_num_rows($qry);
  19.  
  20. if ($num_rows <= 0) {
  21. echo "No existe un usuario o contraseña con: <strong>".$_POST['username']."</strong><br>";
  22. echo "<a href=login.html>Vuelve a intentarlo</a>";
  23.  
  24. } else {
  25.  
  26. setcookie("loggedin", "".$_POST['username']."", time()+(3600 * 24));
  27. echo "<img src=img/user.png /> <span style=font-size:25px;><strong>".$_POST['username']."</strong></span><br><a href=logout.php>Cerrar sesión</a><br><br><img src=img/edit.png /> <a href=members/profile.php>Editar perfil</a><br><img src=img/members.png /> <a href=list.php>Miembros</a> | <a href=login2.php>Prueba</a>";
  28. }
  29. ?>
  30. <html>
  31. <head>
  32. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
  33. <style type="text/css">
  34. body {
  35.     background:#fafafa;
  36.     font-family: Arial, Helvetica, sans-serif;
  37.     font-size: 12px;
  38.     color: rgb(75,75,74);
  39.     text-align: left;
  40. }
  41. a {
  42.     text-decoration:none;
  43.     color: rgb(75,75,74);
  44. }
  45. </style>
  46. </head>
  47. </html>

Supongo que algo de aquí está mal, o algo, porque no lo entiendo...

¿Sabes cuál es el error o errores?

Gracias,
¡Saludos!
  #12 (permalink)  
Antiguo 18/08/2011, 13:09
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Problemas con sistema de usuarios

Sustituye tu if por esto:
Código PHP:
Ver original
  1. if ($num_rows <= 0) {
  2.    echo "No existe un usuario o contraseña con: <strong>".$_POST['username']."</strong><br>";
  3.    echo "<a href=login.html>Vuelve a intentarlo</a>";
  4.    exit;
  5. } else {
  6.    $_SESSION['id'] = $match['id'];
  7.    echo "<img src=img/user.png /> <span style=font-size:25px;><strong>".$_POST['username']."</strong></span><br><a href=logout.php>Cerrar sesión</a><br><br><img src=img/edit.png /> <a href=members/profile.php>Editar perfil</a><br><img src=img/members.png /> <a href=list.php>Miembros</a> | <a href=login2.php>Prueba</a>";
  8. }

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #13 (permalink)  
Antiguo 18/08/2011, 13:12
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Problemas con sistema de usuarios

Al código que te pasé le falta el session_start(), que lo añadí después, pero se ve que ya habías copiado el código:
Código PHP:
Ver original
  1. <?php
  2. if (isset($_SESSION['id'])) {
  3.    // Aquí sabes que el usuario está registrado, pones el código que quieras que vea.
  4. } else {
  5.    // Aquí sabes que el usuario NO está registrado, tomas las acciones que quieras (enviarlo al login, por ejemplo).
  6. }
  7. ?>

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #14 (permalink)  
Antiguo 18/08/2011, 13:15
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Problemas con sistema de usuarios

Perdón, me lie con una cosa, es este el if:
Código PHP:
Ver original
  1. if ($num_rows <= 0) {
  2.    echo "No existe un usuario o contraseña con: <strong>".$_POST['username']."</strong><br>";
  3.    echo "<a href=login.html>Vuelve a intentarlo</a>";
  4.    exit;
  5. } else {
  6.    $row = mysql_fetch_array($qry);
  7.    $_SESSION['id'] = $row['id'];
  8.    echo "<img src=img/user.png /> <span style=font-size:25px;><strong>".$_POST['username']."</strong></span><br><a href=logout.php>Cerrar sesión</a><br><br><img src=img/edit.png /> <a href=members/profile.php>Editar perfil</a><br><img src=img/members.png /> <a href=list.php>Miembros</a> | <a href=login2.php>Prueba</a>";
  9. }

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #15 (permalink)  
Antiguo 18/08/2011, 14:45
 
Fecha de Ingreso: mayo-2011
Mensajes: 38
Antigüedad: 12 años, 11 meses
Puntos: 1
Respuesta: Problemas con sistema de usuarios

Gracias. ¿Me puedes decir el resultado total de todo? xD Tú te liaste, pero yo más con los tres if. ¿Dónde va cada uno? :S He intentado hacerlo como he creído entender, y no funciona. Supongo que es tema de que no lo he entendido bien...
  #16 (permalink)  
Antiguo 18/08/2011, 15:51
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Problemas con sistema de usuarios

login.php:
Código PHP:
Ver original
  1. <?php
  2.     ob_start();
  3.      
  4.     include("config.php");
  5.      
  6.     // connect to the mysql server
  7.     $link = mysql_connect($server, $db_user, $db_pass)
  8.     or die ("Could not connect to mysql because ".mysql_error());
  9.      
  10.     // select the database
  11.     mysql_select_db($database)
  12.     or die ("Could not select database because ".mysql_error());
  13.      
  14.     $match = "select id from $table where username = '".$_POST['username']."'
  15.    and password = '".$_POST['password']."';";
  16.      
  17.     $qry = mysql_query($match)
  18.     or die ("Could not match data because ".mysql_error());
  19.     $num_rows = mysql_num_rows($qry);
  20.      
  21.     if ($num_rows <= 0) {
  22.        echo "No existe un usuario o contraseña con: <strong>".$_POST['username']."</strong><br>";
  23.        echo "<a href=login.html>Vuelve a intentarlo</a>";
  24.        exit;
  25.     } else {
  26.        session_start();
  27.        $row = mysql_fetch_array($qry);
  28.        // Aquí puedes pasar los datos que quieras, pero realmente con la id te vale, si necesitas sacar el nombre, haces una consulta con esta id y listo.
  29.        $_SESSION['id'] = $row['id'];
  30.        echo "<img src=img/user.png /> <span style=font-size:25px;><strong>".$_POST['username']."</strong></span><br><a href=logout.php>Cerrar sesión</a><br><br><img src=img/edit.png /> <a href=members/profile.php>Editar perfil</a><br><img src=img/members.png /> <a href=list.php>Miembros</a> | <a href=login2.php>Prueba</a>";
  31.     }
  32.     ob_end_flush();
  33.     ?>
  34.     <html>
  35.     <head>
  36.     <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
  37.     <style type="text/css">
  38.     body {
  39.         background:#fafafa;
  40.         font-family: Arial, Helvetica, sans-serif;
  41.         font-size: 12px;
  42.         color: rgb(75,75,74);
  43.         text-align: left;
  44.     }
  45.     a {
  46.         text-decoration:none;
  47.         color: rgb(75,75,74);
  48.     }
  49.     </style>
  50.     </head>
  51.     </html>

Luego, en todas las demás páginas que quieras que tenga acceso restringido pones esto:
Código PHP:
Ver original
  1. <?php
  2.     session_start();
  3.     if (!isset($_SESSION['id'])) {
  4.        // Esto lo va a enviar al índice, porque no está logueado.
  5.        header('Location: index.html');
  6.        exit;
  7.     }
  8.     // Aquí ya está logueado y pones el resto de tu código PHP.
  9.     ?>
  10. <p>Aquí pones todo el resto de tu código HTML</p>

Por último, que ya veo que la tienes por ahí, en logout.php (página a la que envías para cerrar sesión) pones:
Código PHP:
Ver original
  1. <?php
  2. unset($_SESSION['id']);
  3. header('Location: index.html');
  4. ?>

Yo creo que ya está. Sigo repitiéndote que estoy no es ni mucho menos una cosa general, cada aplicación es un mundo, igual la tuya no se adapta a esto. De hecho, seguramente no se adapte, es más bien al contrario, tienes que adaptar tú lo que te doy a tu aplicación.

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #17 (permalink)  
Antiguo 19/08/2011, 05:48
 
Fecha de Ingreso: mayo-2011
Mensajes: 38
Antigüedad: 12 años, 11 meses
Puntos: 1
Respuesta: Problemas con sistema de usuarios

Muchas gracias, me funciona Supongo que en el archivo "login.php" se determina el tiempo de sesión. ¿Cómo puedo cambiarlo? Porque al volver a "login.php" y a otras páginas me caduca la sesión (volviendo atrás no, sino introduciendo la URL del archivo).
  #18 (permalink)  
Antiguo 22/08/2011, 01:40
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Problemas con sistema de usuarios

Perdón, no me he conectado desde el jueves.

No es que el tiempo de sessión expire, ni mucho menos. Es que tal y como lo tienes montado, vas de login.html a login.php enviando los datos por post de lo que el usuario rellenó en el formulario. Si introduces a mano la dirección de login.php irás a esta página, pero en $_POST no tendrás ningún dato. Entonces, al hacer la comprobación de si el usuario no está en la base de datos te dará verdadero, ya que ni si quiera tienes los datos del usuario.

La solución es sencilla, simplemente añade la misma comprobación que para todas las demás páginas. Si el usuario ya tiene una sesión, envíalo a una página de las restringidas sin hacer las comprobaciones siguientes del php.

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #19 (permalink)  
Antiguo 22/08/2011, 05:21
 
Fecha de Ingreso: mayo-2011
Mensajes: 38
Antigüedad: 12 años, 11 meses
Puntos: 1
Respuesta: Problemas con sistema de usuarios

No lo he entendido. ¿Tengo que poner algún código más? ¿En "login.php"? ¿O dónde? :S

Y te agradezco que sigues respondiendo mis dudas.
  #20 (permalink)  
Antiguo 22/08/2011, 05:31
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Problemas con sistema de usuarios

Claro, es la misma idea que esto:
Código PHP:
Ver original
  1. <?php
  2.     session_start();
  3.     if (!isset($_SESSION['id'])) {
  4.        // Esto lo va a enviar al índice, porque no está logueado.
  5.        header('Location: index.html');
  6.        exit;
  7.     }
  8.     // Aquí ya está logueado y pones el resto de tu código PHP.
  9.     ?>
Pero al contrario. Es decir, tú accedes a la página login.php para crear la sesión, pero si la sesión ya existe, no tienes que crearla, luego te puedes saltar todo el código y pasar a lo que pasas una vez la creas. Esto es: si isset($_SESSION['id']), me salto todo lo que hay y paso directamente a la zona en la que ya he creado la sesión, en caso contrario, tengo que hacerlo todo.

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #21 (permalink)  
Antiguo 22/08/2011, 05:41
 
Fecha de Ingreso: mayo-2011
Mensajes: 38
Antigüedad: 12 años, 11 meses
Puntos: 1
Respuesta: Problemas con sistema de usuarios

Te juro que me cuesta entenderlo. No es que no lo expliques bien, es que no entiendo cómo hacerlo. Si tengo una página restringida, es decir, sólo accesible para los usuarios registrados y logueados, ¿de qué código constaría? Ahora tengo una de prueba, que contiene este código:
Código PHP:
Ver original
  1. <?php
  2.         session_start();
  3.         if (!isset($_SESSION['id'])) {
  4.            // Esto lo va a enviar al índice, porque no está logueado.
  5.            header('Location: index.html');
  6.            exit;
  7.         }
  8.         // Aquí ya está logueado y pones el resto de tu código PHP.
  9.         ?>
  10.     <p>Aquí pones todo el resto de tu código HTML</p>

En principio funciona bien, pero al volver al "login.php" ya caduca, cierra o lo que sea la sesión. Y estoy pensando que quizás es por otro motivo. He creado como un miniperfil en la página de "login.php", si quiero volver a él, me dirijo a esta página. Igual, al volver a crear la sesión o algo me hace algún conflicto... Igual es cuestión de que si la sesión se inicia, que redireccione al miniperfil, que lo situaría en otra página... ¿Puede que los tiros vayan por ahí?
  #22 (permalink)  
Antiguo 22/08/2011, 05:55
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Problemas con sistema de usuarios

No es por quitarte las ilusiones, pero si no lo entiendes es porque tienes lagunas grandes de base sobre el funcionamiento de PHP. Ya te he explicado por qué cuando vuelves a la página login.php se te cierra la sesión y no es porque caduque, es porque vuelves a ejecutar el código de esta página, pero con resultado diferentes. Por qué? Te explico los pasos, más claro no lo voy a poder poner:
1) El usuario accede a tu aplicación y va a login.html (o dónde sea que tienes el formulario de registro).
2) Rellena los campos del formulario con sus datos y pulsa el botón de envío.
3) Los datos rellenos se guardan en la variable $_POST y se envían a la página login.php que accede a ellos.
4) Con estos datos, hace una consulta a la base de datos, para ver si el usuario rellenó bien los datos.
5) Si los rellenó bien y la consulta devolvió algún registro, ejecuta el código que esté en el else de este if: if ($num_rows <= 0).

Ahora bien, qué sucede cuando vuelves a redirigir a esta página desde una página que no es el formulario, por ejemplo con un link (<a href="login.php">...</a>)? Pues sencillo, la variable $_POST no está rellena, porque el usuario no ha rellenado ningún formulario ni nada por el estilo. Se accede a login.php sin datos en el $_POST y, por consiguiente, la consulta a la base de datos no devuelve ningún resultado y se ejecuta el código del if de if ($num_rows <= 0). Es decir, la página reacciona como que el usuario no se ha podido loguear.

Soluciones? Hay miles, que creo que es otro fallo que tienes de concepto. El mismo problema lo vas a poder solucionar de varias formas. Una ya te la he dicho, pero no la has entendido, que sería controlar al inicio de login.php si la sesión ya ha sido creada y, si lo ha sido, no intentar volver a crearla. Otra solución es la que intuyes tú, que es sacar el código que has metido en login.php a otra página que sea perfil.php o como quieras llamarla y que en login.php sólo haya una redirección a dicha página. Pero hay más soluciones, sólo tienes que intentar entenderlo y buscar la que más te guste, pero mientras no lo entiendas tendrás estos líos.

No se puede empezar la casa por el tejado, si no entienes el funcionamiento básico de un formulario no vas a poder montar un sistema de usuarios. Y no es por echártelo en cara ni nada, sino un consejo, empieza leyendo algún manual y aclárate con esto antes de seguir, porque si no, vas a tener muchas más dudas.

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #23 (permalink)  
Antiguo 22/08/2011, 06:20
 
Fecha de Ingreso: mayo-2011
Mensajes: 38
Antigüedad: 12 años, 11 meses
Puntos: 1
Respuesta: Problemas con sistema de usuarios

Muchas gracias, las dudas aclaradas. Me has ayudado muchísimo. Todo y que algo no entendí, tú volvías a explicármelo para que lo comprendiera. He aprendido mucho PHP, pero como es algo tan grande, con miles de posibilidades, en realidad ha sido poco. Pero por algo he empezado, ahora me he familiarizado un poco con el código y leyendo manuales, cursos, ejemplos, tutoriales, etc. podré comprender este gran mundo que es la programación web.

Nuevamente muchas gracias,
¡Saludos!

PD: Si tengo la página del perfil, ¿cómo puedo "llamar" a la variable $_POST o algo para mostrar el nombre de usuario? :S

Última edición por ignaoa; 22/08/2011 a las 06:30
  #24 (permalink)  
Antiguo 22/08/2011, 09:42
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Problemas con sistema de usuarios

Si ya tienes tu variable en la sesión ($_SESSION['id']) tendrías que hacer otra consulta a la base de datos para extraer el nombre de usuario en perfil.php basado en ese ID que ya tienes en tu sesión.

Saludos.
  #25 (permalink)  
Antiguo 23/08/2011, 05:25
 
Fecha de Ingreso: mayo-2011
Mensajes: 38
Antigüedad: 12 años, 11 meses
Puntos: 1
Respuesta: Problemas con sistema de usuarios

Gracias, GatorV. vgonga1986 ya me indicó en un código que podía consultar el nombre de usuario, pero no sé cómo hacerlo a partir de la ID...
  #26 (permalink)  
Antiguo 23/08/2011, 06:36
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Problemas con sistema de usuarios

Sinceramente, ya creo que te estás colando, esto es lo más básico que puedes tener en un sistema PHP con Base de datos. Tienes una consulta hecha arriba, que mira en la tabla por username y password. Pues es hacer lo mismo, pero mirando por la id, a partir de la cual rescatas todos los demás datos.

En serio, mírate un manual antes de seguir preguntando, porque denotas que no sabes absolutamente nada. A mí eso me da igual, pero es que es tan básico que es el capítulo 1 de cualquier manual. Y para eso están los manuales, porque si no, nos vas a tener aquí respondiéndote lo que queda de año.

Sin ánimo de ofender, un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #27 (permalink)  
Antiguo 23/08/2011, 07:12
 
Fecha de Ingreso: mayo-2011
Mensajes: 38
Antigüedad: 12 años, 11 meses
Puntos: 1
Respuesta: Problemas con sistema de usuarios

Tienes toda la razón. Me he mirado ya en manuales y tutoriales cómo extraer datos de la base de datos. Lo único con lo que he dado ha sido con:
Código PHP:
Ver original
  1. SELECT username FROM nombre_tabla

Eso sabría hacerlo, debería conectar con la base de datos y hacer esta consulta, pero no sé cómo hacerlo a partir de la ID, que es la que ha "definido" la sesión.

Supongo que tengo que crear una variable que equivalga a la consulta de la base de datos, y luego imprimirla, ¿no? Vaya, esto es tan básico que lo tengo claro, dado que sale en manuales y lo que he leído, pero lo de extraer datos a partir de otros no lo he encontrado. ¿Tengo que editar un poco el código que selecciona los datos (SELECT ......)?

Muchas gracias por la constante atención,
¡Saludos!
  #28 (permalink)  
Antiguo 23/08/2011, 07:31
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Problemas con sistema de usuarios

Bueno, es que esto ya no es ni PHP, esto es consultas SQL sin más. Dices que sólo has encontrado eso de ahí, pues no habrás buscado demasiado bien. Mira lo que sale con poner en google "select sql". Mira este manual de SQL.

Para sacar datos con SQL tienes que usar SELECT y la sintaxis la tienes por ahí. Para filtrar los resultados tienes que usar dentro del SELECT la cláusula WHERE. Tienes esto en tu código de antes:
Código PHP:
Ver original
  1. $match = "select id from $table where username = '".$_POST['username']."'
  2.   and password = '".$_POST['password']."';";

Ni si quiera hay que saber programación, sólo hay que saber inglés: SELECCIONA id DE $table CUANDO username ES IGUAL A $variable Y password ES IGUAL A $otra_variable;

Para hacer lo contrario, sería algo así: SELECCIONA nombre, password, más_datos_posibles DE $table CUANDO id ES IGUAL A $variable_en_la_que_tienes_el_id

Yo lo siento mucho, pero no te voy a ayudar más, estoy perdiendo demasiado tiempo con este tema y son cosas tan básicas que las encuentras a poco que busques un poco.

Suerte y un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #29 (permalink)  
Antiguo 23/08/2011, 08:33
 
Fecha de Ingreso: mayo-2011
Mensajes: 38
Antigüedad: 12 años, 11 meses
Puntos: 1
Respuesta: Problemas con sistema de usuarios

Entonces puedo crear una variable llamada "$user" (por ejemplo) que:
Código PHP:
Ver original
  1. $user = "select id from $table where username = '".$_POST['username']."' and password = '".$_POST['password']."';";

¿El PHP puede fallar? Ya hace un rato que dos de las páginas PHP que he creado salen en blanco...

Etiquetas: contenido, diferente, logueados, sesión, 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 10:25.