Foros del Web » Programando para Internet » PHP »

variable de sesion con dato de una BD

Estas en el tema de variable de sesion con dato de una BD en el foro de PHP en Foros del Web. Hola, pues mi pregunta es ¿como sacar un dato de la bd para poder tenerla como variable de sesion? mi codigo es el siguiente: Código ...
  #1 (permalink)  
Antiguo 22/01/2009, 14:03
Avatar de kurokishi  
Fecha de Ingreso: enero-2009
Ubicación: Tenochtitlán
Mensajes: 109
Antigüedad: 15 años, 3 meses
Puntos: 1
Pregunta variable de sesion con dato de una BD

Hola, pues mi pregunta es ¿como sacar un dato de la bd para poder tenerla como variable de sesion?
mi codigo es el siguiente:
Código PHP:
<?php
session_start
();
$_SESSION["existe"]='si';
If(isset(
$_POST["usuario"]) and isset($_POST["password"]))
{
$usuario=$_POST["usuario"]; 
$pass=$_POST["password"];

//validaciones de las variables
$con=pg_connect("host=127.0.0.1 port=5432 user=postgres password=**** dbname=Curso");
if (!
$con
    {
        echo 
'Error al conectarse, verifique sus datos.';
    }
 else     
    {
    
$sql="SELECT usuario FROM comparacion WHERE usuario='$usuario' and contrasena='$pass'";
$sql1="SELECT nivel FROM comparacion WHERE usuario='$usuario'";
$query2=pg_send_query($sql1);
$resultado=pg_fet_result($query2);//con este query saco el valor que quiero sea variable de sesion
$query=pg_query($sql);
If(
pg_num_rows($query)==1)
    {
$row=pg_fetch_array($query);
$_SESSION["usuario"]=$row[0];
$_SESSION["usuario"]=$row[1];
$_SESSION["usuario"]=$usuario;
$_SESSION["nivel"]=$resultado;//aqui lo asigno a la variable de sesion
header ('Location: curso/nihongo_aragon.php?modulo=inicio');
exit;
    }
else
    {
header ('Location: logerror.php');
exit;
    }
    }
}    
?>
Pero al momento de hacer imprimir como prueba las variables de sesion lo que me hace es que si saca correcto el valor de la variable 'usuario' pero al imprimir la de 'nivel' me imprime el query!
Como podria hacer que me muestre el valor que esta en la base de datos? ya que con ella voy a hacer que dependiendo del valor de 'nivel' me redireccione a una pagina dependiendo del valor de este.
De antemano gracias y espero que me puedan ayudar.
  #2 (permalink)  
Antiguo 22/01/2009, 14:11
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: variable de sesion con dato de una BD

es obvio... ya que $resultado tiene el valor de la query!!!

si deseas otro valor, usa el array $row[] para obtenerlo (y lo raro es que tu mismo ya te diste cuenta, pero no quieres solucionarlo)

demás, ¿para que sobre escribes tanto tu variable, si ya tienes un valor del POST???

Código PHP:
 // $_SESSION["usuario"]=$row[0]; // ¿¿¿
// $_SESSION["usuario"]=$row[1]; // ???
// $_SESSION["usuario"]=$usuario;
$_SESSION["nivel"]=$row['level'];// columna del nivel 
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 22/01/2009, 18:34
Avatar de kurokishi  
Fecha de Ingreso: enero-2009
Ubicación: Tenochtitlán
Mensajes: 109
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: variable de sesion con dato de una BD

Gracias!!, creo que no observe mi esquema con detenimiento
Pues ahora lo que falta es hacer una comparacion if, con nivel, que es un booleano, mi codigo es el siguiente:
ej.
Código PHP:
....
If(
pg_num_rows($query)==1)
{
$row=pg_fetch_array($query);
$_SESSION["usuario"]=$row[0];
$_SESSION["usuario"]=$row[1];
$_SESSION["usuario"]=$usuario;
$_SESSION["nivel"]=$row[1];
          if (
$_SESSION['nivel]='false')
{
header ('
Locationcurso/...pagina para este nivel);
exit;
}
elseif (
$_SESSION['nivel']='true')
{
header ('Location: curso/...pagina para este nivel);
}
else
{
header ('
Locationlogerror.php);
exit;
}

Ahora ya no entra a la pagina y me manda a mi script de error!!
si me pudieran decir en donde esta mi error se los agradeceria
  #4 (permalink)  
Antiguo 22/01/2009, 18:41
Avatar de jfl_freak  
Fecha de Ingreso: enero-2009
Ubicación: Guatemala
Mensajes: 96
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: variable de sesion con dato de una BD

Prueba asi:

Código PHP:
If(pg_num_rows($query)==1)
{
$row=pg_fetch_array($query);
$_SESSION["usuario"]=$row[0];
$_SESSION["usuario"]=$row[1];
$_SESSION["usuario"]=$usuario;
$_SESSION["nivel"]=$row[1];
     if (
$_SESSION['nivel]='false')
     {
    header ('
Locationcurso/...pagina para este nivel);
    exit;
     }
    else (
$_SESSION['nivel']='true')
    {
        
header ('Location: curso/...pagina para este nivel);
    }
}
else
{
header ('
Locationlogerror.php);
exit;

Al igual que Peteketrueke no entiendo xq sobre escribes tu variable Usuario.
  #5 (permalink)  
Antiguo 22/01/2009, 19:08
Avatar de kurokishi  
Fecha de Ingreso: enero-2009
Ubicación: Tenochtitlán
Mensajes: 109
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: variable de sesion con dato de una BD

Pues intente hacer lo que me dices jfl_freak, pero no me deja, me manda error, por lo que tuve que usar un elseif.
Y ahora entra al sistema, pero incluso mis cuentas con valor true me las cambia a false (o asi me lo muestra cuando las imprimo en el sistema) y entra solamente a la pagina del nivel false.
Antes sin no ponia este ciclo entraba y me mostraba bien los valores de true o false dependiendo del usuario, pero ya con el if ifelse solo me manda a la pagina que tengo de false y si la cuenta tiene un true me imprime que es false, a que se debera??
Gracias
  #6 (permalink)  
Antiguo 22/01/2009, 19:16
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: variable de sesion con dato de una BD

bueno, fijate en tus comillas... revisa bien tu sintaxis!

false es booleano, no 'string'... osea que debe ir sin comillas!!!

en las comparaciones debe usar == y no = que es asignación,

Código:
// demas, estas usando 3 comillas!! y donde no debes

if ($_SESSION['nivel]='false') // MAL
if ($_SESSION['nivel']==false) // OK

// ¿no crees que debes cerrar las comillas???

header ('Location: curso/...pagina para este nivel); // MAL

header ('Location: curso/...pagina para este nivel'); // OK


Cita:
Iniciado por jfl_freak Ver Mensaje
[...]

Al igual que Peteketrueke no entiendo xq sobre escribes tu variable Usuario.
[...]
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Última edición por pateketrueke; 22/01/2009 a las 19:25 Razón: booleano
  #7 (permalink)  
Antiguo 22/01/2009, 19:17
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: variable de sesion con dato de una BD

Corrige el codigo de jfl_freak agregando las comillas faltantes al final de los header(), tal vez asi si funcione.

Edito:

Cita:
// AQUI: false es booleano, no 'string'... debe ir sin comillas!!!
if ($_SESSION['nivel]='false')

// ACA: ¿no crees que debes cerrar las comillas???
header ('Location: curso/...pagina para este nivel);
pateketrueke, tambien te falto cerrar la comilla de nivel
__________________
- León, Guanajuato
- GV-Foto
  #8 (permalink)  
Antiguo 22/01/2009, 19:26
Avatar de jfl_freak  
Fecha de Ingreso: enero-2009
Ubicación: Guatemala
Mensajes: 96
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: variable de sesion con dato de una BD

jajajajajaja es vd Triby :D
  #9 (permalink)  
Antiguo 22/01/2009, 19:40
Avatar de kurokishi  
Fecha de Ingreso: enero-2009
Ubicación: Tenochtitlán
Mensajes: 109
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: variable de sesion con dato de una BD

Pues hice caso a sus aclaraciones, pero ya cheque las comillas y ya todo, ahora lo que pasa es al reves, ahora lo que pasa es que me manda a la pantalla de 'true' y mis usuarios con 'false' me los pone como 'true'

Ahora el valor en vez de 't' o 'f' como me salia antes cambia a '1' (igual valor de true en booleano) aunque ¿no deberia mandarme una 't' o 'f'?
A ver si me pueden decifrar que esta pasando?? Por que la verdad es que yo no
Gracias y este es mi script, para que vean como esta:

Código PHP:
<?php
session_start
();
$_SESSION["existe"]='si';
If(isset(
$_POST["usuario"]) and isset($_POST["password"]))
{
$usuario=$_POST["usuario"]; 
$pass=$_POST["password"];

//validaciones de las variables
$con=pg_connect("host=127.0.0.1 port=5432 user=postgres password=lufy dbname=Curso");
if (!
$con
    {
        echo 
'Error al conectarse, verifique sus datos.';
    }
 else     
    {
    
$sql="SELECT usuario, nivel FROM comparacion WHERE usuario='$usuario' and contrasena='$pass'";
$query=pg_query($sql);
    If(
pg_num_rows($query)==1)
    {
        
$row=pg_fetch_array($query);
        
$_SESSION["usuario"]=$row[0];
        
$_SESSION["usuario"]=$row[1];
        
$_SESSION["usuario"]=$usuario;
        
$_SESSION["nivel"]=$row[1];
        
        if (
$_SESSION["nivel"]=false)
        {
            
header ('Location: curso/nihongo_aragon.php?modulo=inicio');
            exit;
        }
        elseif (
$_SESSION["nivel"]=true)
        {
            
header ('Location: curso/nihongo_aragon.php?modulo=prueba');
            exit;
        }
    }
    else
    {
        
header ('Location: logerror.php');
        exit;
    }
    }
}
?>
  #10 (permalink)  
Antiguo 22/01/2009, 19:46
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: variable de sesion con dato de una BD

Código PHP:
    If(pg_num_rows($query)==1)
    {
        
$row=pg_fetch_array($query);
        
$_SESSION["usuario"]=$usuario;
        
$_SESSION["nivel"]=$row[1];
        
        if (
$_SESSION["nivel"]==false// Estaba mal, debe ser doble signo igual 
Que valores almacenas en nivel?, si manejas 0 para falso y 1 para verdadero, entonces la comparacion debe ser:

if ($_SESSION["nivel"]==0)
__________________
- León, Guanajuato
- GV-Foto
  #11 (permalink)  
Antiguo 22/01/2009, 20:03
Avatar de kurokishi  
Fecha de Ingreso: enero-2009
Ubicación: Tenochtitlán
Mensajes: 109
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: variable de sesion con dato de una BD

Pues cuando entraba al sistema sin hacer ninguna comparacion me estaba trabajando con 'f' y 't', pero a la hora de hacer esta modificacion ' me mostro un 1.
Bueno, acabo de hacer una prueba y ya todo funciono 'correctamente' ya que ahora si me muestra una 't' o 'f' dependiendo del usuario, pero memanda en ambos casos a la pagina de true .
Gracias por la ayuda
  #12 (permalink)  
Antiguo 22/01/2009, 20:20
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: variable de sesion con dato de una BD

Entonces cambia esa comparacion a == 'f' y se debe solucionar.
__________________
- León, Guanajuato
- GV-Foto
  #13 (permalink)  
Antiguo 22/01/2009, 20:26
Avatar de kurokishi  
Fecha de Ingreso: enero-2009
Ubicación: Tenochtitlán
Mensajes: 109
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: variable de sesion con dato de una BD

Gracias, ya quedo ahora si (aunque por regañarme que no es string, sino booleano y lo debia poner sin comillas y ahora que siempre no? )
Bueno, pues entonces quque es un valor booleano me lo toma como string?
Muchas gracias a todos por su ayuda!
  #14 (permalink)  
Antiguo 22/01/2009, 20:34
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: variable de sesion con dato de una BD

Seguramente MySQL lo toma como boleano, pero PHP lo obtiene como string, habra que buscar documentacion al respecto, a menos que sea un campo varchar(1) y tu le asignes directamente 'f' o 't', que bien puede ser el resultado de insertar 'false' o 'true' en un campo de 1 solo caracter.
__________________
- León, Guanajuato
- GV-Foto
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 16:13.