Foros del Web » Programando para Internet » PHP »

Obtener datos de un usuario con $_SESSION

Estas en el tema de Obtener datos de un usuario con $_SESSION en el foro de PHP en Foros del Web. Hola, tengo una duda con PHP. He creado una base de datos con MySQL y un sistema de registro que parece funcionar, pues cuando introduzco ...
  #1 (permalink)  
Antiguo 23/03/2015, 11:15
 
Fecha de Ingreso: septiembre-2014
Mensajes: 72
Antigüedad: 10 años, 2 meses
Puntos: 0
Obtener datos de un usuario con $_SESSION

Hola, tengo una duda con PHP.

He creado una base de datos con MySQL y un sistema de registro que parece funcionar, pues cuando introduzco los datos en el formulario estos pasan a la base de datos. Ahora estoy intentando crear un sistema de Login, que reconoce bien a los usuarios registrados, pues cuando introduzco los datos consigo que salte la función displayThanks() con un mensaje de agradecimiento por loguearse.

Pero el tema que no tengo muy claro es el de los permisos y como mostrar la web a las personas registradas y que han conseguido acceder. Para empezar, quiero que el menú en el que aparecen las opciones de Iniciar Sesión o Registrarse desaparezcan para que se vean el nombre del usuario que ha accedido y una opción de Logout. Os pego parte del codigo que llevo hasta ahora, que he copiado de un libro de fundamentos de PHP.

Por una parte existe un script login.php, que tiene una función para procesar el formulario de logueo que es la siguiente:

Código PHP:
function processForm() { 
    
    
$requieredFields = array( "username""password" );
    
$missingFields = array();
    
$errorMessages = array();
    
    
$member = new Member ( array( 

        
"username" => isset($_POST["username"]) ? preg_replace"/[^ \-\_a-zA-Z0-9]/"""$_POST["username"] ) : "",
        
"password" => isset($_POST["password"]) ? preg_replace"/[^ \-\_a-zA-Z0-9]/"""$_POST["password"] ) : "",
    ) );
    
    foreach (
$requieredFields as $requieredField) { 
        
        if (!
$member->getValue($requieredField) ) {
            
            
$missingFields[] = $requieredField
            
        }
        
    }
    
    if (
$missingFields) { /
        
        
$errorMessages[] = '<p class="error">Por favor, asegúrese de haber rellenado todos los campos del formulario de entrada.</p>';
        
    } elseif ( !
$loggedInMember $member->authenticate() )  {/
        
        
$errorMessages[] = '<p class="error">El nombre de usuario o contraseña son incorrectos. Por favor, asegúrese de haberlos escrito correctamente.</';
        
    }
    
    if (
$errorMessages) { 
        
        
displayForm($errorMessages$missingFields$member); 
        
    } else {
        
        
$_SESSION["member"] = $loggedInMember
        
displayThanks();
        
    }
    

Por lo que creo entender, los datos la sesión se han guardado en $loggedInMember. Lo que yo quiero hacer ahora, es obtener de esos datos $_SESSION varios de los datos que hay guardados en la base de datos de MySQL, como el nombre de usuario, el nombre real u otros datos, pero no se como hacerlo.

En el menú en el que quiero que desaparezcan el iniciar sesión y el registrarse he escrito lo siguiente:

Código PHP:
<?php

                  session_start
();

                  
$usuario $_SESSION["member"];

                if(empty(
$usuario)) { 

                echo 
"<a href='login.php'> Iniciar sesión</a> <span style='color:#dde5f0'> | </span> <a href='registro.php'> Registrarse </a>";; 

                } else { 

                echo 
$usuario;

                } 
?> </p>
Intentando que se muestre el nombre de usuario en caso de que si esta iniciada la sesión, se escriba el nombre del usuario, y en caso contrario aparezcan los enlaces para iniciar sesión y registrarse.

El error que me aparece es el siguiente:



¿Qué hago mal? ¿Algún consejo?

Gracias y un saludo.
  #2 (permalink)  
Antiguo 23/03/2015, 11:18
Avatar de NueveReinas  
Fecha de Ingreso: septiembre-2013
Ubicación: No tan Buenos Aires
Mensajes: 1.101
Antigüedad: 11 años, 2 meses
Puntos: 145
Respuesta: Obtener datos de un usuario con $_SESSION

¿Inicias la sesión donde está el código de processForm?
__________________
¿Te sirvió la respuesta? Deja un +1
  #3 (permalink)  
Antiguo 23/03/2015, 11:20
Avatar de MaNuX0218  
Fecha de Ingreso: marzo-2014
Mensajes: 787
Antigüedad: 10 años, 8 meses
Puntos: 67
Respuesta: Obtener datos de un usuario con $_SESSION

Para mostrar segun que datos al usuario logeado vasta con:

Código PHP:
Ver original
  1. if(!empty($_SESSION["member"])){
  2. // el usuario esta logeado y puede ver {
  3. }else {
  4. // el usuario no esta logeado
  5. }

Para mostrar los datos de la base de datos tendrias que realizar una consulta donde el where sea $_SESSION["member"], de hay sacara los datos de esa sesion.

Saludos.
__________________
No te preocupes si tu código no funciona bien. Si todo lo hiciera, no tendrías trabajo.
  #4 (permalink)  
Antiguo 24/03/2015, 07:34
 
Fecha de Ingreso: septiembre-2014
Mensajes: 72
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Obtener datos de un usuario con $_SESSION

Cita:
Iniciado por MaNuX0218 Ver Mensaje
Para mostrar segun que datos al usuario logeado vasta con:

Código PHP:
Ver original
  1. if(!empty($_SESSION["member"])){
  2. // el usuario esta logeado y puede ver {
  3. }else {
  4. // el usuario no esta logeado
  5. }

Para mostrar los datos de la base de datos tendrías que realizar una consulta donde el where sea $_SESSION["member"], de hay sacara los datos de esa sesion.

Saludos.
Gracias por las respuestas.

No tengo claro como se haría esta consulta ni donde habría que realizarla. ¿Sería algo asi?

Código PHP:
public static function getUsername() {
            
            
$conn parent::connect(); 
            
$sql "SELECT username FROM $_SESSION['member']" 
            
            try {
                
                
$st $conn->prepare($sql); 
                
$st->execute(); 
                
$usuario $st->fetch(); 

} catch (
PDOException $e) { 
                
                
parent::disconnect($conn);
                
                die (
"Query failed: " $e->getMessage() );
                
            }
            
        } 
Lo hago y me sigue dando error.

He consultado con un profesor y me ha dicho que no se puede imprimir directamente un objeto PHP, por lo que tengo que añadir a la clase correspondiente el método __toString(), pero no se como añadir exactamente esa función a mi clase Member, que supongo que es a la que habría que añadirla.

Como veréis, estoy hecho un lío. Estudiar en la UNED es una completa pérdida de tiempo, porque los libros te dan ejemplos resueltos que llegas a comprender, pero a la hora de desarrollar cosas por tu cuenta es como si no supieses nada.

Gracias de nuevo y un saludo.
  #5 (permalink)  
Antiguo 24/03/2015, 12:09
Avatar de NueveReinas  
Fecha de Ingreso: septiembre-2013
Ubicación: No tan Buenos Aires
Mensajes: 1.101
Antigüedad: 11 años, 2 meses
Puntos: 145
Respuesta: Obtener datos de un usuario con $_SESSION

Estás preguntándole a la base de datos por una sesión que únicamente existe en el navegador.
Es decir, le estás preguntando al servidor algo que está del lado del cliente.

Crea la sesión y dale un nombre.
Por ejemplo:

Código PHP:
Ver original
  1. if( $email == $email and $password == $password /*aquí pones tus comprobaciones corrrespondientes, esto es un ejemplo */){
  2.     // Se inicia la sesión, por ejemplo:
  3.     $_SESSION['usuario'] = $email;
  4. } else {
  5.     /*Los datos no son correctos, se le da error, o se destruye la sesión, etc. Lo que consideres necesario*/
  6. };

DATO: El session_start(); debe ser lo primero, absolutamente lo primero, que tengas en tu código.
__________________
¿Te sirvió la respuesta? Deja un +1
  #6 (permalink)  
Antiguo 24/03/2015, 12:40
 
Fecha de Ingreso: septiembre-2014
Mensajes: 72
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Obtener datos de un usuario con $_SESSION

Muchas gracias por tu ayuda, pero hay algo que no acabo de entender.

No se supone que en el primer script, el del logueo, se esta creando un nuevo objeto member, que en caso de comprobar que el nombre de usuario y la contraseña existen en la base de datos, ya hace esto que me indicas? Me refiero a las ultimas lineas:

} else {

$_SESSION["member"] = $loggedInMember;
displayThanks();

}

¿No se supone entonces, que se estaría almacenando el nombre de usuario y la contraseña en $loggedInMember? Pero es que luego escribo echo $loggedInMember y me dice que la variable no esta definida...

Estoy completamente desquiciado, llevo como 5 horas mirando por internet y no doy con la solución, ¿podrías ponerme un ejemplo con algo más de código?

Gracias y un saludo
  #7 (permalink)  
Antiguo 24/03/2015, 12:46
Avatar de NueveReinas  
Fecha de Ingreso: septiembre-2013
Ubicación: No tan Buenos Aires
Mensajes: 1.101
Antigüedad: 11 años, 2 meses
Puntos: 145
Respuesta: Obtener datos de un usuario con $_SESSION

Cita:
Iniciado por Viturbiko Ver Mensaje
Muchas gracias por tu ayuda, pero hay algo que no acabo de entender.

No se supone que en el primer script, el del logueo, se esta creando un nuevo objeto member, que en caso de comprobar que el nombre de usuario y la contraseña existen en la base de datos, ya hace esto que me indicas? Me refiero a las ultimas lineas:

} else {

$_SESSION["member"] = $loggedInMember;
displayThanks();

}

¿No se supone entonces, que se estaría almacenando el nombre de usuario y la contraseña en $loggedInMember? Pero es que luego escribo echo $loggedInMember y me dice que la variable no esta definida...

Estoy completamente desquiciado, llevo como 5 horas mirando por internet y no doy con la solución, ¿podrías ponerme un ejemplo con algo más de código?

Gracias y un saludo
No se como tienes establecida la conexión de la DB ni como preguntas si existe el nombre de usuario y la contraseña, pero básicamente en el login tienes que comprobar si los datos recogidos en el formulario de ingreso son los mismos que en la base de datos.

En caso de que no sean iguales, se le muestra al usuario un error.

Por otra parte, no entiendo por qué no te muestra $loggedInMember.
Prueba a comprobarlo por HTML:

Código HTML:
Ver original
  1. <p>SESIÓN: <?php echo $loggedInMember ?></p>

Si no te muestra nada, prueba con esto:

Código HTML:
Ver original
  1. <p>SESIÓN: <?php echo $_SESSION["member"] ?></p>
__________________
¿Te sirvió la respuesta? Deja un +1
  #8 (permalink)  
Antiguo 24/03/2015, 13:30
 
Fecha de Ingreso: septiembre-2014
Mensajes: 72
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Obtener datos de un usuario con $_SESSION

Bueno acabo de conseguir más o menos lo que quería. Al final era tan simple como escribir:

Código PHP:
<p>SESIÓN: <?php echo $_SESSION["member"]->getValue("username"?></p>
Y ya aparece el nombre de usuario.

El problema es que ahora no se como conseguir que el menú muestre el nombre de usuario. Pruebo lo siguiente:

Código PHP:
<p> <?php

                $usuario 
$_SESSION["member"]->getValue("username"); 

                if (empty(
$usuario)) {  

                echo 
"<a href='login.php'> Iniciar sesión</a> <span style='color:#dde5f0'> | </span> <a href='registro.php'> Registrarse </a>";;  

                } else {  

                echo 
$usuario

                }
                
                
?> </p>
Pero me aparece el siguiente error:



A ver si alguien puede ayudarme.

Quiero agradecerte otra vez lo mucho que me estás ayudando y lo poco que tardas en contestar.
  #9 (permalink)  
Antiguo 24/03/2015, 13:40
 
Fecha de Ingreso: septiembre-2014
Mensajes: 72
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Obtener datos de un usuario con $_SESSION

Bueno buscando en Internet lo he solucionado, el session_start() tiene que declararse DESPUÉS del require, o salta ese error.

Bueno una vez evitado el suicidio, y antes de cerrar el tema, quiero aprovechar para preguntar donde se incluye el session_start, si lo situaríais en una displayPageHeader() que aparezca en absolutamente todas las páginas, si es bueno ponerlo siempre o no, etc.

Muchísimas gracias y un saludo.
  #10 (permalink)  
Antiguo 24/03/2015, 13:46
Avatar de NueveReinas  
Fecha de Ingreso: septiembre-2013
Ubicación: No tan Buenos Aires
Mensajes: 1.101
Antigüedad: 11 años, 2 meses
Puntos: 145
Respuesta: Obtener datos de un usuario con $_SESSION

Cita:
Iniciado por Viturbiko Ver Mensaje
Bueno buscando en Internet lo he solucionado, el session_start() tiene que declararse DESPUÉS del require, o salta ese error.

Bueno una vez evitado el suicidio, y antes de cerrar el tema, quiero aprovechar para preguntar donde se incluye el session_start, si lo situaríais en una displayPageHeader() que aparezca en absolutamente todas las páginas, si es bueno ponerlo siempre o no, etc.

Muchísimas gracias y un saludo.
Preferiblemente ponlo en cada página.
__________________
¿Te sirvió la respuesta? Deja un +1
  #11 (permalink)  
Antiguo 24/03/2015, 13:55
 
Fecha de Ingreso: septiembre-2014
Mensajes: 72
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Obtener datos de un usuario con $_SESSION

Pues nada se ve que no puedo cantar victoria. He estado mirando las secciones para asegurarme de que el nombre se mantenía en el menú, he cerrado el localhost y lo he vuelto a abrir y ahora no se muestra ni el iniciar sesión, ni el nombre de menú, ni ninguno de los contenidos de la pagina, saltando este error:



¿Cómo es posible que funcionase hace 5 minutos y haya dejado de funcionar ahora?

Gracias y un saludo.
  #12 (permalink)  
Antiguo 24/03/2015, 13:59
Avatar de NueveReinas  
Fecha de Ingreso: septiembre-2013
Ubicación: No tan Buenos Aires
Mensajes: 1.101
Antigüedad: 11 años, 2 meses
Puntos: 145
Respuesta: Obtener datos de un usuario con $_SESSION

Súbelo al sevidor, quizá te muestre otros errores.

Yo no entiendo porqué la gente hace las comprobaciones en localhost.
__________________
¿Te sirvió la respuesta? Deja un +1
  #13 (permalink)  
Antiguo 24/03/2015, 14:33
 
Fecha de Ingreso: septiembre-2014
Mensajes: 72
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Obtener datos de un usuario con $_SESSION

Por si sirve de ayuda, el error sólo ocurre cuando cierro el navegador. Es decir, puedo cerrar la pestaña y volver a abrir el localhost que todo funciona correctamente, pero es cerrar el navegador, volver a abrirlo y acceder a localhost y saltan los fallos.

No tengo ningún servidor. Es la primera web que hago en mi vida y por eso estoy probando con localhost.

Un saludo.

Etiquetas: formulario, mysql, registro, session, usuario, 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 14:07.