Foros del Web » Programando para Internet » PHP »

Como puedo identificar la id del usuario que entra?

Estas en el tema de Como puedo identificar la id del usuario que entra? en el foro de PHP en Foros del Web. Mi tema es el siguiente: Ago que se metan unos usuarios a una pagina protegida mediante un formulario (usuario y pass), que hace action a ...
  #1 (permalink)  
Antiguo 11/06/2006, 08:10
 
Fecha de Ingreso: mayo-2005
Ubicación: Murcia
Mensajes: 319
Antigüedad: 12 años, 6 meses
Puntos: 0
Como puedo identificar la id del usuario que entra?

Mi tema es el siguiente:

Ago que se metan unos usuarios a una pagina protegida mediante un formulario (usuario y pass), que hace action a control.php que lleva el siguiente codigo:


<?
//conecto con la base de datos
$conn = mysql_connect("localhost","usuario","pass");
//selecciono la BBDD
mysql_select_db("gekuar_clientespd",$conn);

//Sentencia SQL para buscar un usuario con esos datos
$ssql = "SELECT * FROM clientes WHERE usuario='$usuario' and pass='$pass'";
//Ejecuto la sentencia
$rs = mysql_query($ssql,$conn);

//vemos si el usuario y contraseña es váildo
//si la ejecución de la sentencia SQL nos da algún resultado
//es que si que existe esa conbinación usuario/contraseña
if (mysql_num_rows($rs)!=0){
//usuario y contraseña válidos
//defino una sesion y guardo datos
session_start();
session_register("autentificado");
$autentificado = "SI";
$_SESSION['usuario']= $usuario;
header ("Location: cliente.php");
}else {
//si no existe le mando otra vez a la portada
header("Location: ../index.php?errorusuario");
}
mysql_free_result($rs);
mysql_close($conn);
?>


En la página cliente.php que es la que está protegida lleva un un <?include ("seguridad.php");?> y la pagina seguridad.php lleva el siguiente codigo:

<?
//Inicio la sesión
session_start();
$_SESSION['usuario']= $usuario;
$_SESSION['$id']= $id;
//COMPRUEBA QUE EL USUARIO ESTA AUTENTIFICADO
if ($_SESSION["autentificado"] != "SI") {
//si no existe, envio a la página de autentificacion
header("Location: ../index.php");
//ademas salgo de este script
exit();
}
?>


Bien lo que yo quiero hacer es que me ponga el nombre del usuario en la pagina cliente.php que es la protegida y lo consigo poniendo lo siguiente:
<? echo $_SESSION['usuario']?>

En la base de datos tengo una tabla asi: id, usuario, pass y quiero hacer que en los link de la pagina cliente.php me lo diriga a la id del usuario que entra(que se autentifica) por ejemplo cliente_perfil.php?id=4 esto se conseguiria poniendo en el codigo esto: <a href="cliente_perfil.php?id=<? echo $id['$id'];?>">- Ver perfil</a> si no me equivoco.

Pero en realidad no se el porque no me pone la id de ese usuario y en la consulta ago esto: "select * from clientes WHERE usuario='$usuario' AND id='$id'".


Alguien me puede ayudar?

Última edición por Raules; 12/06/2006 a las 14:21
  #2 (permalink)  
Antiguo 11/06/2006, 09:23
okram
Invitado
 
Mensajes: n/a
Puntos:
Si tu consulta es asi:

Código PHP:
$rs mysql_query("select * from clientes WHERE usuario='$usuario' AND id='$id'"); 
pues el id estara guardado en $rs['id']

Luego en la pagina seguridad.php veo que colocas esto:

$_SESSION['usuario']= $usuario;
$_SESSION['$id']= $id;

Pero al ser una pagina independiente el valor de $usuario y de $id es nulo, asiq ue creo que deberias borrar esas lineas...

unja buena opcion es que una vez que haces la consulta guardes todos los campos en una var de sesion:

Código PHP:
 if (mysql_num_rows($rs)!=0){ 
$datos mysql_fetch_assoc($rs);
    
//usuario y contraseña válidos 
    //defino una sesion y guardo datos 
    
session_start(); 
    
//El uso de sesion_register() es obsoleto, por lo que es mejor que uses $_SESSION
//session_register("autentificado"); 
    
$_SESSION['autentificado'] = "SI"
 
//$_SESSION['usuario']= $usuario;
$_SESSION['datos'] = $datos;
    
header ("Location: cliente.php"); 

Asi, para llamar a cualquier columna del resultado usas:

$_SESSION['datos']['columna'];

Salu2
  #3 (permalink)  
Antiguo 12/06/2006, 01:24
Avatar de deccweb  
Fecha de Ingreso: febrero-2003
Ubicación: Mataro
Mensajes: 365
Antigüedad: 14 años, 9 meses
Puntos: 0
Mensaje

y no seria mejor guardar solo el id del usuario en la session en vez de grabar todos los campos de la tabla?

Kanamonex yo daria de alta
Código PHP:
session_start(); 
session_register("autentificado"); 
$autentificado "SI"
$_SESSION['usuario']= $rs[usuario];
$_SESSION['id']= $rs[id];
header ("Location: cliente.php"); 
}else { 
//si no existe le mando otra vez a la portada 
header("Location: ../index.php?errorusuario"); 

mysql_free_result($rs); 
mysql_close($conn); 
Y despues en la pagina que necesites diferenciar el id... pues le pones $session[id];.
__________________
Calle17.net

edgargranados.es
  #4 (permalink)  
Antiguo 12/06/2006, 13:21
 
Fecha de Ingreso: mayo-2005
Ubicación: Murcia
Mensajes: 319
Antigüedad: 12 años, 6 meses
Puntos: 0
No me funciona de ninguna de las maneras esas...

Mira yo tengo por ejemplo el index.php que tiene un formulario con el siguiente codigo:


index.php
<form action="clientes/control.php" method="post">
Cliente:
<input type="text" size="10" name="usuario" />
Contraseña:
<input type="password" size="10" name="pass" />
<input type="submit" name="boton" value="entrar" style="height:1px" />
</form>

Y en la pagina control.php que es la accion que hace el formulario tiene el siguiente codigo:

<?
//conecto con la base de datos
$conn = mysql_connect("localhost","uss","pass");
//selecciono la BBDD
mysql_select_db("gekuar_clientespd",$conn);

//Sentencia SQL para buscar un usuario con esos datos
$ssql = "SELECT * FROM clientes WHERE usuario='$usuario' and pass='$pass'";
//Ejecuto la sentencia
$rs = mysql_query($ssql,$conn);

//vemos si el usuario y contraseña es váildo
//si la ejecución de la sentencia SQL nos da algún resultado
//es que si que existe esa conbinación usuario/contraseña
if (mysql_num_rows($rs)!=0){
//usuario y contraseña válidos
//defino una sesion y guardo datos
session_start();
$SESSION["usuario"]=$usuario;
session_register("autentificado");
$autentificado = "SI";
header ("Location: cliente.php");
}
else {
//si no existe le mando otra vez a la portada
header("Location: ../index.php?errorusuario");
}
mysql_free_result($rs);
mysql_close($conn);
?>


Es decir que si el usuario y pass es correcto tiene que entrar a la pagina cliente.php

En la pagina cliente.php tiene un include seguridad.php que tiene el siguiente codigo:


<?
//Inicio la sesión
session_start();
//COMPRUEBA QUE EL USUARIO ESTA AUTENTIFICADO
if ($_SESSION["autentificado"] != "SI") {
//si no existe, envio a la página de autentificacion
header("Location: ../index.php");
//ademas salgo de este script
exit();
}
?>

Es decir que "no puede entrar" ningun usuario no registrado.

En la pagina cliente.php tiene el siguiente codigo:


<html>
.....

<?php
include("conex.php");
$link=Conectarse();
$result=mysql_query("select * from clientes WHERE usuario='$usuario' AND id='$id'",$link);
?>

....
<i>Cliente: </i><? echo $_SESSION['usuario']?></div>
<div id=texto_clientes>
<p><a href="cliente_perfil.php?id=<? echo $id['$id'];?>">- Ver perfil</a><br />
<a href="cliente_cuentas.php?id=<? echo $id['$id'];?>">- Listar mis cuentas</a><br />
<a href="cliente_pagos.php?id=<? echo $id['$id'];?>">- Informar mis pagos</a><br />
<a href="cliente_soporte.php?id=<? echo $id['$id'];?>">- Solicitar Soporte</a><br />

....

</html>

Es decir que yo tengo en la base de datos creada una tabla con las siguiente celdas:

1 id
2 usuario
3 pass

Y yo lo que quiero saber es que cuando un usuario acceda a la pagina restringida me diga la id que tiene, ¿para que quiero saber eso?
pues lo quiero saber porque en los enlaces tengo que poner que me enseñe por ejemplo el perfil de la id 1 poniendo este codigo si no me equivoco:

<a href="cliente_perfil.php?id=<? echo $id['$id'];?>">- Ver perfil</a>

O como podria hacerlo para que me muestre las cosas de ese cliente?

Agradecería mucho la colaboracion de toda aquella gente que se moleste en contestarme.

Muchisimas gracias
  #5 (permalink)  
Antiguo 12/06/2006, 19:00
okram
Invitado
 
Mensajes: n/a
Puntos:
Al momento de loguear usas este script

Código PHP:
     //usuario y contraseña válidos 
    //defino una sesion y guardo datos 
    
session_start(); 
    
$SESSION["usuario"]=$usuario;
    
session_register("autentificado"); 
    
$autentificado "SI";
    
header ("Location: cliente.php"); 
Pues simplemente tienes que guardar el id en una var de sesion asi como lo haces con el nombre de usuario... por otro lado veo que no estas llamando como se deberia a las vars del formulario...

Primero: el uso de session_register() es ya obsoleto en las ultimas y no tan ultimas versiones de php... en su defecto es mejor usar el array superglobal $_SESSION['variable'] que incluso es mas sencilla de usar...

Luego, para llamar a las variables que te llegan del formulario existe igual el superglobal $_POST, o en su defecto $_REQUEST, aunque esta ultima no es muy confiable

hice un arreglo total a tu codigo para el login, por lo que deberia quedar asi:

Código PHP:
 <? 
//conecto con la base de datos 
$conn mysql_connect("localhost","uss","pass"); 
//selecciono la BBDD 
mysql_select_db("gekuar_clientespd",$conn); 

//Sentencia SQL para buscar un usuario con esos datos 
$ssql "SELECT * FROM clientes WHERE usuario='".$_POST['usuario']."' and pass='".$_POST['pass']."'"
//Ejecuto la sentencia 
$rs mysql_query($ssql,$conn); 

//vemos si el usuario y contraseña es váildo 
//si la ejecución de la sentencia SQL nos da algún resultado 
//es que si que existe esa conbinación usuario/contraseña 
if (mysql_num_rows($rs)!=0){ 
// Te añadi esta linea, que creara un array con los resultados de la consulta
$datos mysql_fetch_assoc($rs);
    
//usuario y contraseña válidos 
    //defino una sesion y guardo datos 
    
session_start(); 
     
$_SESSION["usuario"]=$datos['usuario'];
     
$_SESSION["id"]=$datos['id'];
$_SESSION["autentificado"] = "SI";
    
header ("Location: cliente.php"); 
}  
else {  
//si no existe le mando otra vez a la portada  
header("Location: ../index.php?errorusuario");  
}  
mysql_free_result($rs);  
mysql_close($conn);  
?>
y en tu pagina cliente.php
Código PHP:
 <html>
.....

<?php 
// INICIAS LA SESION
session_start();
   include(
"conex.php"); 
   
$link=Conectarse(); 
   
$result=mysql_query("select * from clientes WHERE usuario='".$_SESSION['usuario']."' AND id='".$_SESSION['id']."'",$link); 
?>

....
   <i>Cliente: </i><?=$_SESSION['usuario']?></div> 
   <div id=texto_clientes>
     <p><a href="cliente_perfil.php?id=<?=$_SESSION['id']?>">- Ver perfil</a><br />
       <a href="cliente_cuentas.php?id=<?=$_SESSION['id']?>">- Listar mis cuentas</a><br />
       <a href="cliente_pagos.php?id=<?=$_SESSION['id']?>">- Informar mis pagos</a><br />
       <a href="cliente_soporte.php?id=<?=$_SESSION['id']?>">- Solicitar Soporte</a><br />

....

</html>
No veo falla alguna en el codigo, por lo que deberia funcionarte a la perfeccion... si no, explica cual es el problema que surge (mensajes de error, problemas de carga, etc..)

Salu2
  #6 (permalink)  
Antiguo 13/06/2006, 00:59
 
Fecha de Ingreso: mayo-2005
Ubicación: Murcia
Mensajes: 319
Antigüedad: 12 años, 6 meses
Puntos: 0
PERFECTO okram

Muchísimas gracias lo he comprobado ahora mismo y me funciona a la perfeccion y gracias por ese destacamiento en usar el array superglobal $_SESSION['variable'].

La verdad que soy muy novato en estos momentos y quiero ir aprendiendo poco a poco..

Gracias tio eres el mejor.................
  #7 (permalink)  
Antiguo 13/06/2006, 01:16
Avatar de deccweb  
Fecha de Ingreso: febrero-2003
Ubicación: Mataro
Mensajes: 365
Antigüedad: 14 años, 9 meses
Puntos: 0
Cita:
Iniciado por Raules
Muchísimas gracias lo he comprobado ahora mismo y me funciona a la perfeccion y gracias por ese destacamiento en usar el array superglobal $_SESSION['variable'].

La verdad que soy muy novato en estos momentos y quiero ir aprendiendo poco a poco..

Gracias tio eres el mejor.................
Lo que pasarle el id de cliente por el enlace no te sirve de nada.. pq en la consulta ya le pones "WHERE id=$id".. por lo que, aunque cambies el id del enlace se vera el mismo perfil.
__________________
Calle17.net

edgargranados.es
  #8 (permalink)  
Antiguo 13/06/2006, 13:27
okram
Invitado
 
Mensajes: n/a
Puntos:
Cita:
Iniciado por deccweb
Lo que pasarle el id de cliente por el enlace no te sirve de nada.. pq en la consulta ya le pones "WHERE id=$id".. por lo que, aunque cambies el id del enlace se vera el mismo perfil.
que???

Salu2
  #9 (permalink)  
Antiguo 13/06/2006, 14:25
 
Fecha de Ingreso: mayo-2005
Ubicación: Murcia
Mensajes: 319
Antigüedad: 12 años, 6 meses
Puntos: 0
Perfect

De momento no me faya....

Gracias a los dos por echarme una mano y espero que para alguna otra consulta que tenga me podais ayudar tan efectivamente y rapidos como esta vez....

Saludos..........
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 18:34.