Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] PHP OO Duda con clases y variables session

Estas en el tema de Duda con clases y variables session en el foro de PHP en Foros del Web. Buen día, este vendria siendo mi segundo post en esta comunidad, si acaso esto ya se ha tratado o si no va por aqui pues ...
  #1 (permalink)  
Antiguo 14/07/2014, 08:39
 
Fecha de Ingreso: junio-2014
Ubicación: Trujillo
Mensajes: 37
Antigüedad: 9 años, 10 meses
Puntos: 0
Duda con clases y variables session

Buen día, este vendria siendo mi segundo post en esta comunidad, si acaso esto ya se ha tratado o si no va por aqui pues lo eliminan o lo reubican o me dicen donde se ha tratado para no repetir tema (), bueno creo que mejor voy directo a lo que vine. Veran ando trabajando en la parte de busqueda de un sistema de consultas de recibos de pago, todo iba bien (por aca anteriormente me aclararon una duda unos usuarios muchas gracias), hasta que mi amigo me pidio algo que no habia hecho nunca que es buscar objetos (en este caso datos en la base de datos) relacionados con el usuario que inicio sesion en el sistema, a lo mejor sea mas sencillo de lo que yo pensaba y me ando ahogando en un vaso de agua (recuerden, ando aprendiendo, asi como muchos de ustedes alguna vez), creo que tengo mas o menos una idea de como podria hacerlo funcionar pero creo que me falta aclararme un poco en cuanto a la sintaxis mas apropiada para hacerlo funcionar:

Código PHP:
<?php
require_once ("../app/config/myDBC.php");
if(isset(
$_SESSION['session']))
{
?>
<!DOCTYPE html>
<html lang="es">
 
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link type="text/css" href="../app/estilos/estilo.css" rel="stylesheet" />
    <title>Resultados de Busqueda</title>
</head>
 
<body bgcolor="blue">
 <div id="envoltura">
        <div id="contenedor">
 
            <div id="cabecera" >
                <img src="http://www.forosdelweb.com/f18/app/imagenes/logo.png">
            </div>
 
            <div id="cuerpo">
                    <?php
                    
require_once ("../app/config/myDBC.php");
                    
//Recibimos en variables los campos de la busqueda
                    //Con trim quitamos espacios en blanco al inicio y final
                    
$_SESSION['session'] = $cedula;// Aqui es donde creo que deberia empezar la condicion para que busque acorde a la sesion iniciada
                    
$mes trim($_POST['mes']);
                    
$año trim($_POST['anio']);
                    
$consultas = new myDBC();
                    
$resultados $consultas->seleccionar_recibo($cedula,$mes,$año);
                    foreach(
$resultados as $row){
                    echo 
"Cédula: <strong>".$row['r_mesCedulaE']."</strong><br></br>";
                    echo 
"Nombre: <strong>".$row['r_mesNombreC']."</strong><br></br>";  
                    echo 
"Cargo: ".$row['r_mesNom_cargoC']."<br></br>";  
                    echo 
"Monto: ".$row['r_mesTotal_netoR']."<br></br>";
                    echo 
"Mes: ".$row['r_mesMesC']."<br></br>";                    
                    echo 
"Año: ".$row['r_mesAnoF']."<br></br>";
                    
?>
            <div id="button"><a href="http://www.forosdelweb.com/f18/app/crear_recibo_pdf.php"><h4><img src="http://www.forosdelweb.com/f18/app/imagenes/pdf.png"></a></a></div>
            </div><!--fin cuerpo-->
            <div id="pie">Sistema de Consulta de Pagos</div>
        </div><!-- fin contenedor -->
         <div id="button"><a href="http://www.forosdelweb.com/f18/app/salir.php"><h4><img src="http://www.forosdelweb.com/f18/app/imagenes/salir.png"></a>
         <a href="http://www.forosdelweb.com/f18/app/principal.php"><img src="http://www.forosdelweb.com/f18/app/imagenes/regresar.png"></a></div>
    </div><!--fin envoltura-->
</body>
 
</html>
<?php
}else
echo
'<script type="text/javascript">
      alert("Registrarse para ver este contenido");
      window.location="../app/index.php"
</script>'
;
?>
Bueno creo que eso es todo por ahora, como siempre andare buscando a ver que soluciono mientras y si acaso doy la solución la pongo por aca para que le sirva a otro que se encuentre con el mismo problema, si acaso me falta algo por poner por aqui me dicen, nos vemos ...

Última edición por santosm13; 14/07/2014 a las 08:41 Razón: Corrección leve
  #2 (permalink)  
Antiguo 14/07/2014, 09:29
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 19 años, 8 meses
Puntos: 56
Respuesta: Duda con clases y variables session

Holas, santosm13.

Me da la impresión que efectivamente te estás ahogando en un vaso de agua, especialmente cuando nos muestras la solución ya lista en tu código. O sea, si lo que tienes ya es un buscador de recibos, donde puedes filtrar por la cédula, sólo es cosa que en vez de enviar al buscador lo ingresado en una caja de texto, le envíes el valor asociado al usuario conectado. Para esto, sólo tienes que obtener dicho valor (acá, la cédula) al momento de iniciar la sesión del usuario, para que quede siempre en memoria durante toda dicha sesión. Y todo lo que te digo, parece que ya lo tienes armado en el código que nos muestras.

Saludos!
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
  #3 (permalink)  
Antiguo 14/07/2014, 09:55
Avatar de arcanisgk122  
Fecha de Ingreso: junio-2010
Mensajes: 755
Antigüedad: 13 años, 11 meses
Puntos: 28
Respuesta: Duda con clases y variables session

por que repites dos veces:

Cita:
require_once ("../app/config/myDBC.php");
la duplicidad no te molesta??
__________________
Cooler Master Gladiator 600 - AMD PHENOM II X4 955 @ 3.5GHZ
GA-MA78GM-US2H - Super Talent 800 2GB x 2 Dual, (Unganged)
PSU Cooler Master eXtreme Power Plus 500W - Saphire R7-260OC-2GB
  #4 (permalink)  
Antiguo 16/07/2014, 12:08
 
Fecha de Ingreso: junio-2014
Ubicación: Trujillo
Mensajes: 37
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Duda con clases y variables session

Cita:
Iniciado por arcanisgk122 Ver Mensaje
por que repites dos veces:



la duplicidad no te molesta??
Mmm pues no pense mucho en eso, pero puede que a la larga de problemas, lo tendre en cuenta, gracias por hacermelo notar ...
  #5 (permalink)  
Antiguo 16/07/2014, 12:20
 
Fecha de Ingreso: junio-2014
Ubicación: Trujillo
Mensajes: 37
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Duda con clases y variables session

Cita:
Iniciado por quinqui Ver Mensaje
Holas, santosm13.

Me da la impresión que efectivamente te estás ahogando en un vaso de agua, especialmente cuando nos muestras la solución ya lista en tu código. O sea, si lo que tienes ya es un buscador de recibos, donde puedes filtrar por la cédula, sólo es cosa que en vez de enviar al buscador lo ingresado en una caja de texto, le envíes el valor asociado al usuario conectado. Para esto, sólo tienes que obtener dicho valor (acá, la cédula) al momento de iniciar la sesión del usuario, para que quede siempre en memoria durante toda dicha sesión. Y todo lo que te digo, parece que ya lo tienes armado en el código que nos muestras.

Saludos!
Mm bueno precisamente ando viendo la manera de incluir ese valor en la consulta a la tabla donde busca la información (que vendria siendo la función a la que llama en una de las lineas), veras mi amigo me pidio que los usuarios hicieran la busqueda acorde a una cedula que ya esta en otra tabla que tiene otros datos relacionados a la misma (buscando otra solución a un asunto que andaba solventando anteriormente creo que di con la solución pero no recuerdo bien la sintaxis, bueno no soy adivino para saber que iba a tener que aplicar algo similar ), a lo mejor se entienda mas la intención de mi duda si muestro esto:

Código PHP:
<?php
ini_set
('display_errors'1);
session_start();
// My database Class called myDBC
class myDBC {
    
// our mysqli object instance
    
public $mysqli null;
 
    
// Class constructor override
    
public function __construct() {
 
        include_once 
"dbconfig.php";
        
$this->mysqli = new mysqli(DB_SERVERDB_USERDB_PASSDB_NAME);
 
        if (
$this->mysqli->connect_errno) {
            echo 
"Error MySQLi: ("&nbsp$this->mysqli->connect_errno.") " $this->mysqli->connect_error;
            exit();
        }
        
$this->mysqli->set_charset("utf8");
    }
 
    
// Class deconstructor override
    
public function __destruct() {
        
$this->CloseDB();
    }
 
    
// runs a sql query
    
public function runQuery($qry) {
        
//$pk1 = $this->mysqli->insert_id($pk1);
        
$result $this->mysqli->query($qry);
        
//$result1 = $this->mysqli->query($q1);
        //$result2 = $this->mysqli->query($q2);
         //return $pk1;
         
return $result;
         
//return $result1;
         //return $result2;
    
}
 
    
// Close database connection
    
public function CloseDB() {
        
$this->mysqli->close();
    }
 
    
// Escape the string get ready to insert or update
    
public function clearText($text) {
        
$text trim($text);
        return 
$this->mysqli->real_escape_string($text);
    }
 
    public function 
logueo($cedula$contrasenia){
        
//El password obtenido se le aplica el crypt
        //Posteriormente se compara en el query
        
$pass_c crypt($contrasenia'_er#.lop');
        
$qry "select * from usuarios where usuR_mesCedulaC='$cedula' and usuClaveC='$contrasenia'";
 
        
$result $this->mysqli->query($qry);
        
//Si el resultado obtenido no tiene nada
        //Muestra el error y redirige al index
        
if( $result->num_rows == 0)
        {
            echo
'<script type="text/javascript">
                alert("Usuario o Contraseña Incorrecta");
                window.location="../app/index.php"
                </script>'
;
        }
 
        
//En otro caso
        //En $reg se guarda el resultado de la consulta
        //Al segundo posición de SESION se le asigna el id del usuario
        //Redirige a página logueada
        
else{
            
$reg mysqli_fetch_assoc($result);
            
$_SESSION["session"][] = $reg["usuIdE"];
            
header("location:../app/principal.php");
        }
 
    }
 public function 
seleccionar_recibo($cedula,$mes,$año)
    {
        
$qry "select 
              r_mesCodigoC, 
              r_mesCedulaE, 
              r_mesNombreC,
              r_mesCod_cargoC,
              r_mesNom_cargoC,              
              r_mesT_contratoN, 
              r_mesFecha_ingresoF, 
              r_mesDependenciaC, 
              r_mesNom_ubiC, 
              r_mesBancoC, 
              r_mesCuentaC,              
              r_mesDescripcion_conceptoC, 
              r_mesOrden_conceptoC,  
              r_mesAsignacionR, 
              r_mesDeduccionR, 
              r_mesTotal_netoR, 
              r_mesDes_nominaC, 
              r_mesNom_reporteC, 
              r_mesMesC, 
              r_mesAnoF from r_mes
                     where
                     r_mesCedulaE = '$cedula' and r_mesMesC = '$mes' and r_mesAnoF = '$año'"
;
 
        
$result $this->mysqli->query($qry);
 
        
//Array asociativo que contendrá los datos
        
$valores = array();
 
        
//Si no hay resultados
        //Se avisa al usuario y se redirige al index de la aplicación
        
if($result->num_rows == 0)
        {
            echo
'<script type="text/javascript">
              alert("Ningun registro");
              window.location="../app/principal.php"
            </script>'
;
 
        }
      
//En otro caso, se recibe la información y se
      //se regresa un array con los datos de la consulta
      
else{
            while(
$row mysqli_fetch_assoc($result))
            {
                
//Se agrega cada valor en el array
                
array_push($valores$row);
            }
      }
        
//Regresa array asociativo
        
return $valores;
    }
?>
Voy a ver si doy de nuevo con el articulo que mencione antes con san google a ver si soluciono con eso (si es que lo encuentro primero), dado que viene siendo mi primera vez en aplicarle esto a un buscador , bueno nos vemos...
  #6 (permalink)  
Antiguo 17/07/2014, 07:59
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 19 años, 8 meses
Puntos: 56
Respuesta: Duda con clases y variables session

Holas de nuevo.

Gracias por publicar la clase, así va quedando más claro.
Por el momento, creo que no noté la primera vez que tu primer código en efecto parece correcto, pero sólo hay un detallito que habría que cambiar:

Cambiar esto:
Código PHP:
$_SESSION['session'] = $cedula// de este modo, lo que estás haciendo es pisar la sesión actual con el valor de la variable $cedula, que no es lo usual 
Por esto:
Código PHP:
$cedula $_SESSION['session']; // así obtienes el valor de cédula del usuario conectado 
Ahora bien, de acuerdo a tu clase myDBC, lo que se guarda en tu Sesión no es un valor simple sino un arreglo:

Código PHP:
            $reg mysqli_fetch_assoc($result);
            
$_SESSION["session"][] = $reg["usuIdE"]; 
Si haces print_r o var_dump a la sesión, te saldrá algo como esto:

Array( 0 => "cedula" )

Donde "cedula" es el valor de la cédula del usuario conectado.

Te aconsejo que si sólo vas a guardar el ID del usuario (la cédula) en la sesión, mejor no la guardes en modo arreglo, sino como variable simple, o bien en arreglo pero de tipo hash, de modo que sea más sencillo acceder al valor cuando lo necesites. Por ej.:

Así:
Código PHP:
            $reg mysqli_fetch_assoc($result);
            
$_SESSION["session"]["cedula"] = $reg["usuIdE"]; // modo array hash 
O así:
Código PHP:
            $reg mysqli_fetch_assoc($result);
            
$_SESSION["session"] = $reg["usuIdE"]; // modo variable simple 
De modo que luego invoques el valor de cédula del usuario así:

Código PHP:
$cedula $_SESSION['session']['cedula']; // modo array hash 
Código PHP:
$cedula $_SESSION['session']; // modo variable simple 

Saludos!
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
  #7 (permalink)  
Antiguo 17/07/2014, 09:03
Avatar de arcanisgk122  
Fecha de Ingreso: junio-2010
Mensajes: 755
Antigüedad: 13 años, 11 meses
Puntos: 28
Respuesta: Duda con clases y variables session

recordar que no puedes usar

Código PHP:
Ver original
  1. $_SESSION['session'];

dentro de las consultas... primero pasalos a variable... y luego manipulalo
__________________
Cooler Master Gladiator 600 - AMD PHENOM II X4 955 @ 3.5GHZ
GA-MA78GM-US2H - Super Talent 800 2GB x 2 Dual, (Unganged)
PSU Cooler Master eXtreme Power Plus 500W - Saphire R7-260OC-2GB
  #8 (permalink)  
Antiguo 18/07/2014, 07:03
 
Fecha de Ingreso: junio-2014
Ubicación: Trujillo
Mensajes: 37
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Duda con clases y variables session

Cita:
Iniciado por quinqui Ver Mensaje
Holas de nuevo.

Gracias por publicar la clase, así va quedando más claro.
Por el momento, creo que no noté la primera vez que tu primer código en efecto parece correcto, pero sólo hay un detallito que habría que cambiar:

Cambiar esto:
Código PHP:
$_SESSION['session'] = $cedula// de este modo, lo que estás haciendo es pisar la sesión actual con el valor de la variable $cedula, que no es lo usual 
Por esto:
Código PHP:
$cedula $_SESSION['session']; // así obtienes el valor de cédula del usuario conectado 
Ahora bien, de acuerdo a tu clase myDBC, lo que se guarda en tu Sesión no es un valor simple sino un arreglo:

Código PHP:
            $reg mysqli_fetch_assoc($result);
            
$_SESSION["session"][] = $reg["usuIdE"]; 
Si haces print_r o var_dump a la sesión, te saldrá algo como esto:

Array( 0 => "cedula" )

Donde "cedula" es el valor de la cédula del usuario conectado.

Te aconsejo que si sólo vas a guardar el ID del usuario (la cédula) en la sesión, mejor no la guardes en modo arreglo, sino como variable simple, o bien en arreglo pero de tipo hash, de modo que sea más sencillo acceder al valor cuando lo necesites. Por ej.:

Así:
Código PHP:
            $reg mysqli_fetch_assoc($result);
            
$_SESSION["session"]["cedula"] = $reg["usuIdE"]; // modo array hash 
O así:
Código PHP:
            $reg mysqli_fetch_assoc($result);
            
$_SESSION["session"] = $reg["usuIdE"]; // modo variable simple 
De modo que luego invoques el valor de cédula del usuario así:

Código PHP:
$cedula $_SESSION['session']['cedula']; // modo array hash 
Código PHP:
$cedula $_SESSION['session']; // modo variable simple 

Saludos!
Cita:
Iniciado por arcanisgk122 Ver Mensaje
recordar que no puedes usar

Código PHP:
Ver original
  1. $_SESSION['session'];

dentro de las consultas... primero pasalos a variable... y luego manipulalo
Buen día, gracias por responder, ayer estaba viendo estas suguerencias y justo cuando iba a probar se fue la luz , bueno voy a ver que tal me va y les cuento, en cuanto a lo que dijo arcanisgk122, ¿La conversion debo hacerla dentro de la función en la que hago la consulta o fuera? (perdon por la pregunta pero como dije antes, ando aprendiendo ), bueno nos vemos...
  #9 (permalink)  
Antiguo 18/07/2014, 07:19
 
Fecha de Ingreso: junio-2014
Ubicación: Trujillo
Mensajes: 37
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Duda con clases y variables session

Buen día, acabo de probar lo que me suguirio quinqui, creo que quedo bien pero en la consulta para la conversion me esta mostrando este error:

Warning: Illegal string offset 'cedula' in ../config/myDBC.php on line 124

Voy a seguir buscando a ver si doy con una solución para esa linea, mientras voy a dejar el código para ver si pueden darme una mano:

buscar.php

Código PHP:
<?php
require_once ("../app/config/myDBC.php");
if(isset(
$_SESSION['session']))
{
?>
<!DOCTYPE html>
<html lang="es">
 
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link type="text/css" href="../app/estilos/estilo.css" rel="stylesheet" />
    <title>Resultados de Busqueda</title>
</head>
 
<body bgcolor="blue">
 <div id="envoltura">
        <div id="contenedor">
 
            <div id="cabecera" >
                <img src="http://www.forosdelweb.com/f18/app/imagenes/logo.png">
            </div>
 
            <div id="cuerpo">
                    <?php
                    
//Recibimos en variables los campos de la busqueda
                    //Con trim quitamos espacios en blanco al inicio y final
                    
$cedula $_SESSION['session']['cedula'];
                    if (
$cedula $_SESSION['session']['cedula']){
                    
$mes trim($_POST['mes']);
                    
$año trim($_POST['anio']);
                    
$consultas = new myDBC();
                    
$resultados $consultas->seleccionar_recibo($cedula,$mes,$año);
                    foreach(
$resultados as $row){
                    echo 
"Cédula: <strong>".$row['r_mesCedulaE']."</strong><br></br>";
                    echo 
"Nombre: <strong>".$row['r_mesNombreC']."</strong><br></br>";  
                    echo 
"Cargo: ".$row['r_mesNom_cargoC']."<br></br>";  
                    echo 
"Monto: ".$row['r_mesTotal_netoR']."<br></br>";
                    echo 
"Mes: ".$row['r_mesMesC']."<br></br>";                    
                    echo 
"Año: ".$row['r_mesAnoF']."<br></br>";
                    }
                    }
                    
?>
            <div id="button"><a href="http://www.forosdelweb.com/f18/app/crear_recibo_pdf.php"><h4><img src="http://www.forosdelweb.com/f18/app/imagenes/pdf.png"></a></a></div>
            </div><!--fin cuerpo-->
            <div id="pie">Sistema de Consulta de Pagos</div>
        </div><!-- fin contenedor -->
         <div id="button"><a href="http://www.forosdelweb.com/f18/app/salir.php"><h4><img src="http://www.forosdelweb.com/f18/app/imagenes/salir.png"></a>
         <a href="http://www.forosdelweb.com/f18/app/principal.php"><img src="http://www.forosdelweb.com/f18/app/imagenes/regresar.png"></a></div>
    </div><!--fin envoltura-->
</body>
 
</html>
<?php
}else
echo
'<script type="text/javascript">
      alert("Registrarse para ver este contenido");
      window.location="../app/index.php"
</script>'
;
?>
myDBC.php

Código PHP:
<?php
ini_set
('display_errors'1);
session_start();
// My database Class called myDBC
class myDBC {
    
// our mysqli object instance
    
public $mysqli null;
 
    
// Class constructor override
    
public function __construct() {
 
        include_once 
"dbconfig.php";
        
$this->mysqli = new mysqli(DB_SERVERDB_USERDB_PASSDB_NAME);
 
        if (
$this->mysqli->connect_errno) {
            echo 
"Error MySQLi: ("&nbsp$this->mysqli->connect_errno.") " $this->mysqli->connect_error;
            exit();
        }
        
$this->mysqli->set_charset("utf8");
    }
 
    
// Class deconstructor override
    
public function __destruct() {
        
$this->CloseDB();
    }
 
    
// runs a sql query
    
public function runQuery($qry) {
        
//$pk1 = $this->mysqli->insert_id($pk1);
        
$result $this->mysqli->query($qry);
        
//$result1 = $this->mysqli->query($q1);
        //$result2 = $this->mysqli->query($q2);
         //return $pk1;
         
return $result;
         
//return $result1;
         //return $result2;
    
}
 
    
// Close database connection
    
public function CloseDB() {
        
$this->mysqli->close();
    }
 
    
// Escape the string get ready to insert or update
    
public function clearText($text) {
        
$text trim($text);
        return 
$this->mysqli->real_escape_string($text);
    }
 
    public function 
logueo($cedula$contrasenia){
        
//El password obtenido se le aplica el crypt
        //Posteriormente se compara en el query
        
$pass_c crypt($contrasenia'_er#.lop');
        
$qry "select * from usuarios where usuR_mesCedulaC='$cedula' and usuClaveC='$contrasenia'";
 
        
$result $this->mysqli->query($qry);
        
//Si el resultado obtenido no tiene nada
        //Muestra el error y redirige al index
        
if( $result->num_rows == 0)
        {
            echo
'<script type="text/javascript">
                alert("Usuario o Contraseña Incorrecta");
                window.location="../app/index.php"
                </script>'
;
        }
 
        
//En otro caso
        //En $reg se guarda el resultado de la consulta
        //Al segundo posición de SESION se le asigna el id del usuario
        //Redirige a página logueada
        
else{
            
$reg mysqli_fetch_assoc($result);
            
$_SESSION["session"]["cedula"] = $reg["usuR_mesCedulaC"];
            
header("location:../app/principal.php");
        }
 
    }
public function 
seleccionar_recibo($cedula,$mes,$año)
    {
    
$cedula $_SESSION['session']['cedula'];
        
$qry "select 
              r_mesCodigoC, 
              r_mesCedulaE, 
              r_mesNombreC,
              r_mesCod_cargoC,
              r_mesNom_cargoC,              
              r_mesT_contratoN, 
              r_mesFecha_ingresoF, 
              r_mesDependenciaC, 
              r_mesNom_ubiC, 
              r_mesBancoC, 
              r_mesCuentaC,              
              r_mesDescripcion_conceptoC, 
              r_mesOrden_conceptoC,  
              r_mesAsignacionR, 
              r_mesDeduccionR, 
              r_mesTotal_netoR, 
              r_mesDes_nominaC, 
              r_mesNom_reporteC, 
              r_mesMesC, 
              r_mesAnoF from r_mes
                     where
                     r_mesCedulaE = '$cedula' and r_mesMesC = '$mes' and r_mesAnoF = '$año'"
;
 
        
$result $this->mysqli->query($qry);
 
        
//Array asociativo que contendrá los datos
        
$valores = array();
 
        
//Si no hay resultados
        //Se avisa al usuario y se redirige al index de la aplicación
        
if($result->num_rows == 0)
        {
            echo
'<script type="text/javascript">
              alert("Ningun registro");
              window.location="../app/principal.php"
            </script>'
;
 
        }
      
//En otro caso, se recibe la información y se
      //se regresa un array con los datos de la consulta
      
else{
            while(
$row mysqli_fetch_assoc($result))
            {
                
//Se agrega cada valor en el array
                
array_push($valores$row);
            }
      }
        
//Regresa array asociativo
        
return $valores;
    }
?>
Bueno, creo que eso es todo por ahora, gracias por la ayuda que me han dado hasta ahora...
  #10 (permalink)  
Antiguo 18/07/2014, 08:48
 
Fecha de Ingreso: junio-2014
Ubicación: Trujillo
Mensajes: 37
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Duda con clases y variables session

Buen día, me he encontrado unas lineas que creo que me sirven para la conversion:

Código PHP:
if($_SESSION)
{
$keys_sesion array_keys($_SESSION);
foreach (
$keys_sesion as $key_sesion)
{
$
$key_sesion $_SESSION[$key_sesion];
error_log("variable $key_sesion viene desde $ _SESSION");
}

Si lei bien lo que hace es darle un valor de acuerdo al arreglo que se acomode, lo adapte a lo que ando haciendo de esta manera:

Código PHP:
public function seleccionar_recibo($cedula,$mes,$año)
    {
    if(
$_SESSION)
{
$cedula array_cedula($_SESSION);
foreach (
$cedula as $cedula)
{
$cedula $_SESSION[$cedula];
error_log("variable $cedula viene desde $ _SESSION");
}

        
$qry "select 
              r_mesCodigoC, 
              r_mesCedulaE, 
              r_mesNombreC,
              r_mesCod_cargoC,
              r_mesNom_cargoC,              
              r_mesT_contratoN, 
              r_mesFecha_ingresoF, 
              r_mesDependenciaC, 
              r_mesNom_ubiC, 
              r_mesBancoC, 
              r_mesCuentaC,              
              r_mesDescripcion_conceptoC, 
              r_mesOrden_conceptoC,  
              r_mesAsignacionR, 
              r_mesDeduccionR, 
              r_mesTotal_netoR, 
              r_mesDes_nominaC, 
              r_mesNom_reporteC, 
              r_mesMesC, 
              r_mesAnoF from r_mes
                     where
                     r_mesCedulaE = '$cedula' and r_mesMesC = '$mes' and r_mesAnoF = '$año'"
;
 
        
$result $this->mysqli->query($qry);
 
        
//Array asociativo que contendrá los datos
        
$valores = array();
 
        
//Si no hay resultados
        //Se avisa al usuario y se redirige al index de la aplicación
        
if($result->num_rows == 0)
        {
            echo
'<script type="text/javascript">
              alert("Ningun registro");
              window.location="../app/principal.php"
            </script>'
;
 
        }
      
//En otro caso, se recibe la información y se
      //se regresa un array con los datos de la consulta
      
else{
            while(
$row mysqli_fetch_assoc($result))
            {
                
//Se agrega cada valor en el array
                
array_push($valores$row);
            }
      }
        
//Regresa array asociativo
        
return $valores;
    } 
Pero me arrojo un pequeño error:

Fatal error: Call to undefined function array_cedula() in C:\xampp\htdocs\prueba\app\config\myDBC.php on line 126

¿Creo que me falta algo para terminar de definir bien esas lineas o deberia colocarlas en otro lado?... Donde me lo encontre dicen que puedo tambien ponerlo como una función pero tal vez no sea necesario si se puede poner junto a una ya definida, solo tengo que ver como, bueno si acaso doy con la solución la pongo por aqui para que le sirva otro, nos vemos...
  #11 (permalink)  
Antiguo 18/07/2014, 13:04
 
Fecha de Ingreso: junio-2014
Ubicación: Trujillo
Mensajes: 37
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Duda con clases y variables session

Buenas tardes, lo he solucionado (bueno en parte), use las lineas que me encontre y las puse como una función en mi archivo de configuración, bueno aca va el código (así le sirve a otro):

Código PHP:
public function busquedasesion($cedula){
    if(
$_SESSION)
{
$cedula array_cedula($_SESSION);
foreach (
$cedula as $cedula)
{
$cedula $_SESSION[$cedula];
error_log("variable $cedula viene desde $ _SESSION");
}
}

Ahora solo me falta ver porque no me anda reconociendo la configuración de mi css y terminar de acomodar el archivo para que no de problemas con la consulta al generar el pdf de la busqueda en cuestión (ya lo hace con el archivo que muestra los resultados, tal vez pueda aplicar lo mismo en el pdf), bueno cosa de ver como llamo la función en dicho archivo, y eso seria otro asunto para otro tema, ya lo de la busqueda esta resuelto, gracias por la ayuda proporcionada, si acaso se me presenta otro asunto pues lo pondre por aqui y aplicare la que sigo llevando hasta ahora, nos vemos ...

Última edición por santosm13; 18/07/2014 a las 13:05 Razón: Corrección leve
  #12 (permalink)  
Antiguo 18/07/2014, 15:00
Avatar de arcanisgk122  
Fecha de Ingreso: junio-2010
Mensajes: 755
Antigüedad: 13 años, 11 meses
Puntos: 28
Respuesta: Duda con clases y variables session

puedes hacerla fuera y pasar la variable como parametro

Cita:
$cedula = $_SESSION[$cedula];

funcion($dato);
o puedes recuperarla dentro:


Código PHP:
Ver original
  1. funcion(){
  2. $cedula = $_SESSION[$cedula];
  3.  
  4. }
__________________
Cooler Master Gladiator 600 - AMD PHENOM II X4 955 @ 3.5GHZ
GA-MA78GM-US2H - Super Talent 800 2GB x 2 Dual, (Unganged)
PSU Cooler Master eXtreme Power Plus 500W - Saphire R7-260OC-2GB
  #13 (permalink)  
Antiguo 21/07/2014, 06:42
 
Fecha de Ingreso: junio-2014
Ubicación: Trujillo
Mensajes: 37
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Duda con clases y variables session

Buen día, gracias por responder, lo tendre en cuenta, gracias por el dato...
  #14 (permalink)  
Antiguo 21/07/2014, 07:37
 
Fecha de Ingreso: junio-2014
Ubicación: Trujillo
Mensajes: 37
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Duda con clases y variables session

Buen día, parece que la solución que me diste funciona pero no aparece la tabla que genera la consulta, a lo mejor me falta una linea para que quede bien, te agradeceria mucho que me dijeras en que ando mal ...
Código PHP:
<?php
include_once('../app/config/myDBC.php');
include_once(
'../app/config/pdf.php');

    
//Recibimos la cedula a buscar
    
$mes=$_POST['mes'];
    
$año=$_POST['anio'];
    
/* En la variable $fecha se crea una cadena con datos
         * obtenidos de POST, la cual usaremos en un método Cell()
        **/
    //$fecha="Trujillo a los ".$_POST['dia']." de ". $_POST['mes']. " del ".$_POST['anio'];
 
    //Se crea un objeto de PDF
    //Para hacer uso de los métodos
    
$pdf = new PDF();
    
$pdf->AddPage('P''Letter'); //Vertical, Carta
    
$pdf->SetFont('Arial','B',12); //Arial, negrita, 12 puntos
    //$pdf->Cell(0,10,$fecha,0,1,'R'); //Imprime en el pdf la cadena $fecha
    /* Explicación:
         * 0 - La celda se extiende a todo lo ancho de la hoja
         * 10 - Alto de la celda
         * $fecha - la cadena a imprimir
         * 0 - sin borde (cambien a 1 y chequen el cambio)
         * 1 - Lo que sigue a la celda estará en la siguiente línea
         * 'R' - Texto alineado a la derecha
         * */
    
$pdf->Ln();
 
    
//$pdf->ImprimirTexto('textoFijo.txt'); //Texto fijo
 
    //Creamos objeto de la clase myDBC
    //para hacer uso del método seleccionar_recibo()
    
$consultaPersona = new myDBC();
    
//En una variable guardamos el array que regresa el método
    
function busquedasesion($cedula){
    
$cedula $_SESSION['cedula'];
    
$datosPersona $consultaPersona->seleccionar_recibo($cedula,$mes,$año);
    
//Array de cadenas para la cabecera
    
$cabecera = array("Cédula","Nombre","Código Cargo","Cargo","Tipo Contrato","Ingreso","Nomina a Pagar","Descripción","Asignaciones","Deducciones","Total","Mes","Año");

    
$pdf->tabla($cabecera,$datosPersona,$cedula); //Método que integra a cabecera y datos
    
}
    
$pdf->Output(); //Salida al navegador del pdf
?>
  #15 (permalink)  
Antiguo 21/07/2014, 10:42
Avatar de arcanisgk122  
Fecha de Ingreso: junio-2010
Mensajes: 755
Antigüedad: 13 años, 11 meses
Puntos: 28
Respuesta: Duda con clases y variables session

antes de generar el pdf intenta imprimir las variables todas para ver su contenido omitiendo la salida de pdf

otra situacion es que no veo es que instancias la clase

Cita:
$consultaPersona = new myDBC();
pero no veo donde hagas la consulta, no veo donde llamas a la funcion de la base de satos no veo nada con respecto a la coneccion busqueda y regreso de datos en tu base de datos...

es importante que establescas un orden organisacion de codigo esto que estas haciendo es tipo procedural no orientado a objetos:


Cita:
/*asi puede hacerce*/

//llamamos todas clases
//instanciamos todas las clases

//establecemos variables constantes

//iniciamos los procedimientos
//llamada de funciones externas declaradas en las clases pasando los parámetros necesarios para su funcionamiento($variable);
revisa que la consulta este funcionando adecuadamente y que estas enviando y recibiendo las variables.
__________________
Cooler Master Gladiator 600 - AMD PHENOM II X4 955 @ 3.5GHZ
GA-MA78GM-US2H - Super Talent 800 2GB x 2 Dual, (Unganged)
PSU Cooler Master eXtreme Power Plus 500W - Saphire R7-260OC-2GB
  #16 (permalink)  
Antiguo 21/07/2014, 11:55
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 19 años, 8 meses
Puntos: 56
Respuesta: Duda con clases y variables session

Holas a todos.

Uff leyendo lo que han posteado pues que me perdí totalmente, he visto unas vueltas medio raras para cosas que según mi entender son tan simples como una asignación plana de valores, pero que ustedes han hecho hasta funciones, e incluso invocado funciones que no existen (array_cedula...)...

Sólo para aconsejar, santosm13, te comento lo siguiente:

- Respecto a tu primera consulta, donde quieres obtener los recibos del usuario conectado.
En principio, se supone que tienes una clase donde ejecutas un método que te permite traer todos los recibos del usuario identificado por $cedula, sea quien sea éste. O sea, puedes consultar los recibos del usuario "pedrito" o "juanito" o "santosm13", cierto?
Luego, te pidieron que al usuario conectado le aparecieran sus propios recibos. En ese sentido, no tenías que modificar para nada tu clase. Bastaba con enviarle en el parámetro $cedula, la $cedula del usuario conectado, valor que podías obtener de la sesión. Vale decir, no meter la sesión en la clase.

- Respecto a la sesión de usuario.
Si quieres acceder a la sesión actual, sólo debes acceder al array $_SESSION como si de cualquier arreglo se tratara.

Código PHP:
// así cargas un valor en sesión:
$_SESSION["session"]["cedula"] = "juanito"// ó
$_SESSION["session"]["cedula"] = $cedula_equis;

// así lo llamas:
$cedula $_SESSION["session"]["cedula"]; // ó
$query "SELECT * FROM tabla WHERE cedula = '".$_SESSION["session"]["cedula"]."' "
Saludos!
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
  #17 (permalink)  
Antiguo 21/07/2014, 12:06
 
Fecha de Ingreso: junio-2014
Ubicación: Trujillo
Mensajes: 37
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Duda con clases y variables session

Cita:
Iniciado por arcanisgk122 Ver Mensaje
antes de generar el pdf intenta imprimir las variables todas para ver su contenido omitiendo la salida de pdf

otra situacion es que no veo es que instancias la clase



pero no veo donde hagas la consulta, no veo donde llamas a la funcion de la base de satos no veo nada con respecto a la coneccion busqueda y regreso de datos en tu base de datos...

es importante que establescas un orden organisacion de codigo esto que estas haciendo es tipo procedural no orientado a objetos:




revisa que la consulta este funcionando adecuadamente y que estas enviando y recibiendo las variables.
Cita:
Iniciado por quinqui Ver Mensaje
Holas a todos.

Uff leyendo lo que han posteado pues que me perdí totalmente, he visto unas vueltas medio raras para cosas que según mi entender son tan simples como una asignación plana de valores, pero que ustedes han hecho hasta funciones, e incluso invocado funciones que no existen (array_cedula...)...

Sólo para aconsejar, santosm13, te comento lo siguiente:

- Respecto a tu primera consulta, donde quieres obtener los recibos del usuario conectado.
En principio, se supone que tienes una clase donde ejecutas un método que te permite traer todos los recibos del usuario identificado por $cedula, sea quien sea éste. O sea, puedes consultar los recibos del usuario "pedrito" o "juanito" o "santosm13", cierto?
Luego, te pidieron que al usuario conectado le aparecieran sus propios recibos. En ese sentido, no tenías que modificar para nada tu clase. Bastaba con enviarle en el parámetro $cedula, la $cedula del usuario conectado, valor que podías obtener de la sesión. Vale decir, no meter la sesión en la clase.

- Respecto a la sesión de usuario.
Si quieres acceder a la sesión actual, sólo debes acceder al array $_SESSION como si de cualquier arreglo se tratara.

Código PHP:
// así cargas un valor en sesión:
$_SESSION["session"]["cedula"] = "juanito"// ó
$_SESSION["session"]["cedula"] = $cedula_equis;

// así lo llamas:
$cedula $_SESSION["session"]["cedula"]; // ó
$query "SELECT * FROM tabla WHERE cedula = '".$_SESSION["session"]["cedula"]."' "
Saludos!
Buenas tardes, gracias por responder, respecto a lo que dijeron antes, creo que si miras lo que he puesto hasta ahora te encontraras en que en el archivo de configuración muestro como hago la consulta para buscar la tabla en la bd, ahora sobre como lo muestra en el pdf, creo que me falto poner esto:

Código PHP:
<?php
include_once('../libs/fpdf/fpdf.php');
//include_once('../libs/fpdf/mc_table.php');
/*
 * Se debe crear siempre una clase heredada de FPDF
 * y partir de aqui se irán agregando la cabecera
 * footer, cuerpo, etc
 * */

//Clase en blanco
class PDF extends FPDF
{
    function 
Footer() // Pie de página
    
{
        
// Posición: a 1,5 cm del final
        
$this->SetY(-15);
        
// Arial italic 8
        
$this->SetFont('Arial','I',8);
        
/* Cell(ancho, alto, txt, border, ln, alineacion)
         * ancho=0, extiende el ancho de celda hasta el margen de la derecha
         * alto=10, altura de la celda a 10
         * txt= Texto a ser impreso dentro de la celda
         * border=T Pone margen en la posición Top (arriba) de la celda
         * ln=0 Indica dónde sigue el texto después de llamada a Cell(), en este caso con 0, enseguida de nuestro texto
         * alineación=C Texto alineado al centro
         */
        
$this->Cell(0,10,'FUNDASALUD Trujillo 2014','T',0,'C');
    }
 
    function 
Header() //Encabezado
    
{
        
//Define tipo de letra a usar, Arial, Negrita, 15
        
$this->SetFont('Arial','B',9);
        
        
/* Líneas paralelas
         * Line(x1,y1,x2,y2)
         * El origen es la esquina superior izquierda
         * Cambien los parámetros y chequen las posiciones
         * */
        
$this->Line(10,10,206,10);
        
$this->Line(10,35.5,206,35.5);
        
        
/* Explicaré el primer Cell() (Los siguientes son similares)
         * 30 : de ancho
         * 25 : de alto
         * ' ' : sin texto
         * 0 : sin borde
         * 0 : Lo siguiente en el código va a la derecha (en este caso la segunda celda)
         * 'C' : Texto Centrado
         * $this->Image('images/logo.png', 152,12, 19) Método para insertar imagen
         *     'images/logo.png' : ruta de la imagen
         *     152 : posición X (recordar que el origen es la esquina superior izquierda)
         *     12 : posición Y
         *     19 : Ancho de la imagen <span class="wp-smiley emoji emoji-wordpress" title="(w)">(w)</span>
         *     Nota: Al no especificar el alto de la imagen (h), éste se calcula automáticamente
         * */
 
        
$this->Cell(30,25,'',0,0,'C',$this->Image('../app/imagenes/logo_izquierda.png'135,12,31));
        
$this->Cell(120,25,'FUNDASALUD Trujillo',0,0,'C'$this->Image('../app/imagenes/logo.png',20,12,31));
        
$this->Cell(40,25,'',0,0,'C',$this->Image('../app/imagenes/logo_derecha.png',17512,25));
 
        
//Se da un salto de línea de 25
        
$this->Ln(25);
    }
 
    
/*function ImprimirTexto($file)
    {
        // Leemos el archivo de texto
        $txt = file_get_contents($file);
        /*
         * Arial - Fuente
         * '' - cadena vacía significa imrpimir el texto normal o
         *      se puede poner en Negrita 'B', Italico 'I' o Subrayado 'U'
         *      o una combinación de éstos.
         * 12 - tamaño de fuente
         * *
        $this->SetFont('Arial','',12);
        /*
         * 0 - el ancho se ajusta al margen de la hoja
         * 5 - alto de la celda
         * $txt - Texto a imrpimir.
         * NOTA: Los valores para justificar el texto y celda sin borde
         *       no los pasé, porque son valores por defecto del mismo método
         *
         * Pero quedaría así: MutiCell(0, 5, $txt, 0, 'J')
         * No olviden ver y 'jugar' con los parámetros
         **
        $this->MultiCell(0,5,$txt);
 
    }*/
 
    
function cabecera($cabecera)
    {
        
$this->SetXY(48,115);
        
$this->SetFont('Arial','B',15);
        foreach(
$cabecera as $columna)
        {
            
$this->Cell(42,7,$columna,1'L' );
        }
    }
 
    function 
datos($datos)
    {
        
$this->SetXY(90,115);
        
$this->SetFont('Arial','',12);
            foreach (
$datos as $columna)
            {
                
$this->Cell(80,7,utf8_decode($columna['r_mesCedulaE']),'TRB',2,'L' );
                
$this->Cell(80,7,utf8_decode($columna['r_mesNombreC']),'TRB',2,'L' );
                
$this->Cell(80,7,utf8_decode($columna['r_mesCodigoC']),'TRB',2,'L' );
                
$this->Cell(80,7,utf8_decode($columna['r_mesNom_cargoC']),'TRB',2,'L' );
                
$this->Cell(80,7,utf8_decode($columna['r_mesT_contratoN']),'TRB',2,'L' );
                
$this->Cell(80,7,utf8_decode($columna['r_mesFecha_ingresoF']),'TRB',2,'L' );
                
$this->Cell(80,7,utf8_decode($columna['r_mesDes_nominaC']),'TRB',2,'L' );
                
$this->Cell(80,7,utf8_decode($columna['r_mesDescripcion_conceptoC']),'TRB',2,'L' );
                
$this->Cell(80,7,utf8_decode($columna['r_mesAsignacionR']),'TRB',2,'L' );
                
$this->Cell(80,7,utf8_decode($columna['r_mesDeduccionR']),'TRB',2,'L' );
                
$this->Cell(80,7,utf8_decode($columna['r_mesTotal_netoR']),'TRB',2,'L' );
                
$this->Cell(80,7,utf8_decode($columna['r_mesMesC']),'TRB',2,'L' );
                
$this->Cell(80,7,utf8_decode($columna['r_mesAnoF']),'TRB',2,'L' );
            }
 
    }
 
    
//El método tabla integra a los métodos cabecera y datos
    
function tabla($cabecera,$datos)
    {
        
$this->cabecera ($cabecera);
        
$this->datos($datos);
    }
 
}
//fin clase PDF
?>
Bueno, ahora en cuanto a lo que menciono quinqui sobre los llamados, creo que tomare nota de eso, voy a probar y les cuento como me fue, aunque creo que ya nos andamos saliendo del tema del post que abri (y bueno también que ya lo marqué como solucionado ), aunque la verdad estamos en casi lo mismo solo que ya es mostrar, mm bueno, nos vemos...
  #18 (permalink)  
Antiguo 21/07/2014, 12:31
 
Fecha de Ingreso: junio-2014
Ubicación: Trujillo
Mensajes: 37
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Duda con clases y variables session

Buenas tardes, acabo de probar las pequeñas lineas que me diste quinqui (no habia visto lo de las comillas dobles para forzar el llamado), aun así parece que no reconoce el valor de session (que es la cedula), extraño porque en el archivo de mostrar resultados si lo hace, algun problema con las clases y las declaraciones a lo mejor (aunque no veo donde), probablemente deba hacer lo que me dijo arcanisgk122 y andar descartando por pasos a ver si es que la consulta la envia o no, gracias por toda la ayuda que me estan prestando (y la paciencia que me andan teniendo también ), nos vemos ...
  #19 (permalink)  
Antiguo 22/07/2014, 13:00
 
Fecha de Ingreso: junio-2014
Ubicación: Trujillo
Mensajes: 37
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Duda con clases y variables session

Buenas tardes, revise lo que me dijo arcanisgk122 y no lleva nada de la consulta que esta en la funcion (tambien probé a realizarla en el mismo archivo pero nada, no muestra los resultados en el pdf (ni como una simple tabla), dice que no encuentra los registros, ¿Que sera lo que me esta faltando para que genere el pdf?...
  #20 (permalink)  
Antiguo 23/07/2014, 07:23
 
Fecha de Ingreso: junio-2014
Ubicación: Trujillo
Mensajes: 37
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Duda con clases y variables session

Buenas tardes, revise lo que me dijo arcanisgk122 y no lleva nada de la consulta que esta en la funcion (tambien probé a realizarla en el mismo archivo pero nada, no muestra los resultados en el pdf (ni como una simple tabla), dice que no encuentra los registros, ¿Que sera lo que me esta faltando para que genere el pdf?...
  #21 (permalink)  
Antiguo 23/07/2014, 07:25
 
Fecha de Ingreso: junio-2014
Ubicación: Trujillo
Mensajes: 37
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Duda con clases y variables session

Ups, perdon por el doble mensaje, me equivoque pensando que no lo habia publicado (la conexión en la que me encuentro ahora es un poco lenta), si pueden borrenlo...
  #22 (permalink)  
Antiguo 01/09/2014, 01:18
Avatar de arcanisgk122  
Fecha de Ingreso: junio-2010
Mensajes: 755
Antigüedad: 13 años, 11 meses
Puntos: 28
Respuesta: Duda con clases y variables session

puede ser que la consulta este mal en logica verifica que la consulta tenga los datos, y que los pruebas imprimir en un resultado de request basico asi depuras tu consulta
__________________
Cooler Master Gladiator 600 - AMD PHENOM II X4 955 @ 3.5GHZ
GA-MA78GM-US2H - Super Talent 800 2GB x 2 Dual, (Unganged)
PSU Cooler Master eXtreme Power Plus 500W - Saphire R7-260OC-2GB

Etiquetas: clases, html, session, usuarios, variable, variables
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 17:26.