Foros del Web » Programando para Internet » PHP »

Como solucionar este problema?

Estas en el tema de Como solucionar este problema? en el foro de PHP en Foros del Web. Hola pues como ya habia posteado antes acerca de un script en el cual me comparaba un login, y dependiendo de esto hacer mis variables ...
  #1 (permalink)  
Antiguo 26/01/2009, 18:44
Avatar de kurokishi  
Fecha de Ingreso: enero-2009
Ubicación: Tenochtitlán
Mensajes: 109
Antigüedad: 15 años, 3 meses
Puntos: 1
Como solucionar este problema?

Hola pues como ya habia posteado antes acerca de un script en el cual me comparaba un login, y dependiendo de esto hacer mis variables de sesion conforme al usuario.
Pues bien quise poner otra variable de sesion y no me lo hace, este es mi codigo:
Código PHP:
<?php
session_start
();
$_SESSION["existe"]='si';
If(isset(
$_POST["usuario"]) and isset($_POST["password"]))
{
$usuario=$_POST["usuario"]; 
$pass=$_POST["password"];

$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);
$nick="SELECT nickname FROM id WHERE usuario='$usuario'";
    
$kuery=pg_query($sql);
    If(
pg_num_rows($query)==1)
    {
        if (
pg_num_rows($kuery)==1)
        {
        
$row=pg_fetch_array($query);
        
$_SESSION["usuario"]=$row[0];
        
$_SESSION["usuario"]=$row[1];
        
$_SESSION["usuario"]=$usuario;
        
$_SESSION["nivel"]=$row[1];
        
$col=pg_fetch_array($kuery);
        
$_SESSION['nickname']=$col[1];
                        
        if (
$_SESSION["nivel"]=='f')
        {
            
header ('Location: curso/nihongo_aragon.php?modulo=inicio');
            exit;
        }
        elseif (
$_SESSION["nivel"]=='t')
        {
            
header ('Location: curso/sensei_aragon.php?modulo=inicio');
            exit;
        }
        }
    }
    else
    {
        
header ('Location: logerror.php');
        exit;
    }
    }
}
?>
El script me respeta las variables de sesoin de 'usuario' y de 'nivel' pero NO el de nickname!!
Por probar hice un script de prueba con el cual checa solo la variable de 'nickname', y este es el script:
Código PHP:
<?php
session_start
();
$_SESSION['usuario'];
$_SESSION['nivel'];
$_SESSION['nickname'];

    echo 
"".$_SESSION['usuario']." es la variable de sesion;<br>";
    echo 
"".$_SESSION['nivel']." es el nivel del usuario;<br>";
    echo 
"".$_SESSION['nickname']." es el apodo elegido por el usuario";
    
    
$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 nickname  FROM id WHERE usuario='".$_SESSION['usuario']."'";
    
$kuery=pg_query($sql);
    if (
pg_num_rows($kuery)==1)
    {
        
$row=pg_fetch_array($kuery);
        
$col=$row[1];
        echo 
".$col";
    }
    }
    
?>
Cuando imprimo las variables de 'usuario' y 'nivel' me los muestra sin problemas, pero el de 'nickname' no, y creando nuevamente el query me lo muestra solamente cuando el query manda a llamar a mas de 1 campo!
Código PHP:
$sql="SELECT  *  FROM id WHERE usuario='".$_SESSION['usuario']."'"
De lo contrario me aparece el error de udefined offset 1
A que se debera el problema?
  #2 (permalink)  
Antiguo 26/01/2009, 18:59
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: Como solucionar este problema?

Optimiza tu codigo y consultas, es mas facil solicitar los 3 campos en la misma consulta:

Código PHP:
$sql="SELECT usuario, nivel, nickname 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"]=$usuario;
        
$_SESSION["nivel"]=$row[1];
        
$_SESSION['nickname']=$row[2]; 
El undefined offset 1 te lo da porque en tu consulta original $col solo tenia 1 elemento y su indice era cero, no uno.

Código PHP:
session_start();
// Las siguientes 3 lineas no son necesarias
$_SESSION['usuario'];
$_SESSION['nivel'];
$_SESSION['nickname'];

// Tu codigo continua... y luego...
// Si no vas a hacer alguna verificacion, todo lo siguiente no tiene sentido:

else     
    {
    
$sql="SELECT nickname  FROM id WHERE usuario='".$_SESSION['usuario']."'";
    
$kuery=pg_query($sql);
    if (
pg_num_rows($kuery)==1)
    {
        
$row=pg_fetch_array($kuery);
        
$col=$row[1]; // $row tiene solamente 1 valor y su indice es cero
        
echo ".$col";
    }
    } 
__________________
- León, Guanajuato
- GV-Foto

Última edición por Triby; 26/01/2009 a las 19:02 Razón: Mas codigo
  #3 (permalink)  
Antiguo 26/01/2009, 19:04
Avatar de kurokishi  
Fecha de Ingreso: enero-2009
Ubicación: Tenochtitlán
Mensajes: 109
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Como solucionar este problema?

Pueslo que pasa es que el dato 'nickname' se encuentra en otra tabla, ya que la table de comparacion solo tiene los datos de usuario, password y nivel.
¿deberia de igual forma meter este dato a la tabla para evitar problemas?
  #4 (permalink)  
Antiguo 26/01/2009, 19:12
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: Como solucionar este problema?

Ah, ok, no me fije en los nombres de las tablas, pero puedes usar join:
Código PHP:
$sql="SELECT c.usuario, c.nivel, i.nickname FROM comparacion c, id i WHERE c.usuario='$usuario' AND c.contrasena='$pass' AND i.usuario = c.usuario"
Pides los campos de cada tabla, en este caso hay que agregarles un prefijo a cada campo (c.usuario, c.nivel, i.nickname)para identificar a cual tabla pertenecen; despues en la parte del FROM asignas la referencia de ese prefijo (comparacion c, id i ) y, al final agregar el campo en comun de ambas tablas (AND i.usuario = c.usuario).
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 26/01/2009, 19:44
Avatar de kurokishi  
Fecha de Ingreso: enero-2009
Ubicación: Tenochtitlán
Mensajes: 109
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Como solucionar este problema?

Gracias me fue de mucha ayuda! Aunque estaba checando la estructura del JOIN INNER y le entendi muy poco, entiendo lo que hace pero a la sintaxis casi no .
Pero gracias a este Join 'simplificado' lo pude hacer rapido y me despejo las dudas que tenia sobre este.
Gracias por todo
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 00:52.