Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

clase usuario y clase mysql, error de declaración

Estas en el tema de clase usuario y clase mysql, error de declaración en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Bien al grano, tengo 2 clases, una para conectarme al servidor y BD (clase_mysql.php) , y otra para controlar las actividades del usuario (clase_usuario.php), por ...
  #1 (permalink)  
Antiguo 25/08/2008, 10:03
Avatar de memoo  
Fecha de Ingreso: marzo-2008
Mensajes: 89
Antigüedad: 16 años, 1 mes
Puntos: 1
clase usuario y clase mysql, error de declaración

Bien al grano, tengo 2 clases, una para conectarme al servidor y BD (clase_mysql.php) , y otra para controlar las actividades del usuario (clase_usuario.php), por ejemplo el login.

A la clase_mysql.php la incluyo en clase_usuario.php para hacer el query de login, y también la incluyo (clase_mysql) en otro archivos para conectarme al servidor y hacer querys.

Dentro de clase_usuario.php hago el query de login (select) y si existe el usuario creo las variables de sesión. Otra duda que tengo es que si las creo ahí, dentro de esa clase, siguen disponibles para que las use cuando quiera no? solo falta incluir el archivo clase_usuario.php en donde requiera usarlas no?

Cabe mencionar que apenas empecé a implementar clases, todo iba bien hasta que ahorita intenté hacer eso, me marca el siguiente error:

Fatal error: Cannot redeclare class Clase_MySQL in /home/WWW/jgcruz/transportes/clase_mysql.php on line 13

Yo supongo que es por que como incluyo el archivo clase_usuario.php en dos archivos ha de haber algún conflicto de instanciación o algo, si alguien me puede echar una mano les agradeceré mucho, les dejo mi código.

acceso.php , aqui llamo primero a clase_usuario.php, para hacer el query de login con el objeto $objUsr.
Código PHP:
<?php
    
require("clase_usuario.php");

    
//Verificamos si se va a salir de sesión.
    
session_start();
    if ( (isset(
$_GET['do'])) ) //con isset determinamos si la variable de sesión está inicializada
    
{
          
$_SESSION=array();
          
session_destroy();
          
header("Location:login.php");
    }

    else {
        
$objUsr=new Clase_Usuario();

        
$usuario=$_POST["txt_usuario"];  //Obtenemos los datos introducidos por el usuario
        
$password=$_POST["txt_password"];

        
$numUsuario=$objUsr->login($usuario,$password);
        if(
$numUsuario==1)
            
header ("Location: principal.php");
        else
            
header ("Location: login.php");
    }
?>
clase_usuario.php, aqui hago el query de login con una función e incluyo a clase_mysql.php para hacer la conexión a server y bd.
Código PHP:
<?php    
require("clase_mysql.php");
class 
Clase_Usuario extends Clase_MySQL
{    
    public function 
__construct(){
        
session_start();
    }
    public function 
login($usuario$password)
    {

        try {
            
$objMySQL = new Clase_MySQL();
            
$objMySQL->query("SELECT * FROM tbl_usuarios WHERE usuario='$usuario' AND password='$password'");

            if((
$objMySQL->cuentaFilas())==1) {
                
//Si hubo éxito en la consulta, creamos las variables de sesión
                
$_SESSION['usuario']['id_usuario']    =$objMySQL->valorCampo("id_usuario");
                
$_SESSION['usuario']['usuario']        =$objMySQL->valorCampo("usuario");
                
$_SESSION['usuario']['nombre']        =$objMySQL->valorCampo("nombre");
                
$_SESSION['usuario']['ap_paterno']    =$objMySQL->valorCampo("ap_paterno");
                
$_SESSION['usuario']['ap_materno']    =$objMySQL->valorCampo("ap_materno");
                
$_SESSION['usuario']['permisos']    =$objMySQL->valorCampo("permisos");
                
$_SESSION['numfilas']                =$objMySQL->cuentaFilas();
                return 
$_SESSION['numfilas'];
            }
            else {
                return 
0;
            }
        }
        catch (
Exception $e) {
            echo 
"Excepción atrapada: ",$e;
        }
    }
    public function 
__destruct(){
        
session_unset();
    }
}
?>
finalmente en principal.php mando a llamar de nuevo a clase_usuario.php para checar las variables de sesion, pero me marca el error que les digo, ya probé quitarlo y si no incluyo la clase, no me deja ver las variables de sesión.

Código PHP:
<HTML>
<HEAD>
</HEAD>
<BODY>
<?php 
  
require("config/config_func.php");
  include(
"clase_usuario.php");
  if(!isset(
$_SESSION['usuario']['id_usuario'])){
      echo 
"Error, necesitas identificarte";
      exit();
  }
  else{
      echo 
"Bienvenido, ".$_SESSION['usuario']['id_usuario']." ".$_SESSION['usuario']['ap_paterno'].".";
      if(!
grant('ADMINISTRADOR'))
          echo 
"<br>Usuario normal.";
      else{
          echo 
"<br>ADMINISTRADOR";
          echo 
"<br><a href='frm_nuevousuario.php'>Crear nuevo usuario.</a>";
       }
      echo 
"<br>Num de filas con coincidencias: ".$_SESSION['numfilas'];
   }
?>
  <br><input type="button" value="Salir" onclick="opcion('salirSesion');">

</BODY>
</HTML>
se que es mucho código pero está entendible según yo, gracias y cualquier ayuda o tip es bienvenido!
__________________
And how can't we win? When fools can be kings, don't waste your time, or time will waste you...
Knights Of Cydonia
MUSE ROCKS
  #2 (permalink)  
Antiguo 25/08/2008, 11:18
Avatar de memoo  
Fecha de Ingreso: marzo-2008
Mensajes: 89
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: clase usuario y clase mysql, error de declaración

Las sesiones sobreviven al paso entre clases?

Bien no se si ese sea el mejor título para mi pregunta, pero aquí va la explicación...

Bien tengo 2 clases y 2 archivos php.

dentro del primer archivo php llamo a una clase, que a su vez llama a la segunda para conectarse a la BD.

una vez autentificado el usuario, se redirecciona al segundo archivo php pero quiero usar las variables de sesión que utilizé dentro de la clase, pero cuando quiero imprimirlas no hay nada en el arreglo de sesiones, pero está raro por que se supone que si validó para entrar a la sesion actual.
__________________
And how can't we win? When fools can be kings, don't waste your time, or time will waste you...
Knights Of Cydonia
MUSE ROCKS
  #3 (permalink)  
Antiguo 25/08/2008, 12:19
Avatar de memoo  
Fecha de Ingreso: marzo-2008
Mensajes: 89
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: clase usuario y clase mysql, error de declaración

Bien pues al fin ya he podido resolverlo, les pongo que tenía que crear funciones para accesar a las variables de sesión dentro de la clase clase_usuario.php

aqui les dejo el código por si le es útil a alguien.

Saludos

Código PHP:
    public function getId(){
        return 
$_SESSION['id_usuario'];
    }
    public function 
getUsuario(){
        return 
$_SESSION['usuario'];
    }
    public function 
getNombre(){
        return 
$_SESSION['nombre'];
    }
    public function 
getPaterno(){
        return 
$_SESSION['ap_paterno'];
    }
    public function 
getMaterno(){
        return 
$_SESSION['ap_materno'];
    }
    public function 
getPermisos(){
        return 
$_SESSION['permisos'];
    }
    public function 
getNumFilas(){
        return 
$_SESSION['numfilas'];
    } 
__________________
And how can't we win? When fools can be kings, don't waste your time, or time will waste you...
Knights Of Cydonia
MUSE ROCKS
  #4 (permalink)  
Antiguo 26/08/2008, 08:30
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: clase usuario y clase mysql, error de declaración

Hola memoo,

Para tu primera duda, lo mejor es usar require_once, en lugar de require, para tu segunda duda, si se pueden pasar objetos por una sesión, solo es necesario definirlas antes de llamar a session_start():
Código PHP:
require_once( 'tu_clase.php' );
require_once( 
'tu_otra_clase.php' );
session_start();

echo 
$_SESSION['miobjeto']->algo(); 
Te recomiendo usar los estandares de Zend para codificar: http://framework.zend.com/manual/en/...-standard.html

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 05:24.