PHP - No me reconoce variable POO

   
Vista:

No me reconoce variable POO

Publicado por Giuliano (39 intervenciones) el 18/11/2013 07:04:13
Tengo este codigo para obtener una lista de empleados, mediante el metodo getAll, de la clase empleado, en el archibo empleados.php que esta mas abajo. Este es el codigo de las lista, y obtengo el siguiente error:
Notice: Undefined variable: id in C:\xampp\htdocs\sge\empleado\lista.php on line 10

Notice: Undefined variable: ape in C:\xampp\htdocs\sge\empleado\lista.php on line 10

Notice: Undefined variable: leg in C:\xampp\htdocs\sge\empleado\lista.php on line 10

Notice: Undefined variable: nom in C:\xampp\htdocs\sge\empleado\lista.php on line 10

osea que no me reconoce las variables que paso a $oempleado, que provienen del metodo constructor

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?php
 
// Incluyo la clase de base de datos
require_once $_SERVER['DOCUMENT_ROOT'] . '/sge/includes/php/BaseDeDatos.php';
 
// Incluyo la clase de empleado
require_once $_SERVER['DOCUMENT_ROOT'] . '/sge/empleado/includes/Empleado.php';
 
// Creo el objeto para luego obtener todos los empleados
$oEmpleado = new empleado($id,$ape,$leg,$nom);
 
// Obtengo el array con todos los objetos de empleado
$aItems = $oEmpleado->getAll();
 
?>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>SGE | Lista de Empleados</title>
	<link rel="stylesheet" type="text/css" href="/sge/includes/css/style.css" />
</head>
<body>
 
<div class="wrapper">
 
	<div class="background"></div>
 
	<?php require_once $_SERVER['DOCUMENT_ROOT'] . '/sge/includes/php/header.php';?>
 
	<div class="main">
 
		<div class="buttons">
			<button type="button" onclick="document.location = '/sge/empleado/agregar.php'">Agregar Empleado</button>
		</div>
 
		<table>
 
			<tr>
				<th>ID</th>
				<th>APELLIDO</th>
				<th>NOMBRE</th>
				<th>LEGAJO</th>
				<th colspan="2">&nbsp;</th>
			</tr>
 
			<?php if ( count( $aItems ) == 0 ) { ?>
 
			<tr>
				<td colspan="6">No se han encontrado resultados</td>
			</tr>
 
			<?php } else { foreach ( $aItems as $item ) { ?>
			<tr>
 
				<td><?php echo $item->getIdEmpleado(); ?></td>
				<td><?php echo $item->getApellido(); ?></td>
				<td><?php echo $item->getNombre(); ?></td>
				<td><?php echo $item->getLegajo(); ?></td>
				<td><a class="icon ver" title="Ver/Editar" href="/sge/empleado/empleado.php?id=<?php echo $item->getIdEmpleado(); ?>"></a></td>
				<td><a class="icon eliminar" title="Eliminar" href="/sge/empleado/confirmar_eliminar.php?id=<?php echo $item->getIdEmpleado(); ?>"></a></td>
 
			</tr>
			<?php } } ?>
 
		</table>
 
		<div class="buttons">
			<button type="button" onclick="document.location = '/sge/aplicaciones'">Aplicaciones</button>
		</div>
 
	</div>
 
</div>
 
<?php require_once $_SERVER['DOCUMENT_ROOT'] . '/sge/includes/php/footer.php';?>
 
</body>
</html>

empleado.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?php
 
// Incluyo la clase de base de datos
require_once $_SERVER['DOCUMENT_ROOT'] . '/sge/includes/php/BaseDeDatos.php';
 
// Incluyo la clase de empleado
require_once $_SERVER['DOCUMENT_ROOT'] . '/sge/empleado/includes/Empleado.php';
 
// Creo el objeto para luego cargar los datos
$oEmpleado = new Empleado();
 
// Verifico que el id esté seteado
if ( isset( $_GET['id'] ) == false || $_GET['id'] < 1 )
{
	header("location: lista.php");
}
 
// Cargo la información del empleado
$oEmpleado->buscar($_GET['id']);
 
// Verifico que exista el empleado
if ( $oEmpleado->getIdEmpleado() < 1 )
{
	header("location: lista.php");
}
 
?>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>SGE | Informaci&oacute;n de Empleado</title>
	<link rel="stylesheet" type="text/css" href="/sge/includes/css/style.css" />
</head>
<body>
 
<div class="wrapper">
 
	<div class="background"></div>
 
	<?php require_once $_SERVER['DOCUMENT_ROOT'] . '/sge/includes/php/header.php';?>
 
	<div class="main">
 
		<div class="formulario">
 
			<form action="/sge/empleado/guardar.php" method="post">
 
				<input type="hidden" name="idEmpleado" value="<?php echo $oEmpleado->getIdEmpleado(); ?>"/>
 
				<label for="apellido">Apellido:</label>
				<input type="text" name="apellido" value="<?php echo $oEmpleado->getApellido(); ?>" placeholder="Ingrese el Apellido..."/>
 
				<label for="nombre">Nombre:</label>
				<input type="text" name="nombre" value="<?php echo $oEmpleado->getNombre(); ?>" placeholder="Ingrese el Nombre..."/>
 
				<label for="legajo">Legajo:</label>
				<input type="text" name="legajo" value="<?php echo $oEmpleado->getLegajo()?>" placeholder="Ingrese el N° de Legajo..."/>
 
				<div class="buttons">
					<button type="submit">Guardar</button>
					<button type="button" onclick="window.history.back();">Cancelar</button>
				</div>
 
			</form>
 
		</div>
 
	</div>
 
</div>
 
<?php require_once $_SERVER['DOCUMENT_ROOT'] . '/sge/includes/php/footer.php';?>
 
</body>
</html>

la verdad no se de que me estoy olvidando, por las dudas les dejo el archivo BasesDeDatos.php, que es el que hace la conexion:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
<?php
 
/**
 * Clase que administra las conexiones a la base de datos
 * 
 * @author emmanuel
 */
class BaseDeDatos
{
	/**
	 * Host de conexión al servido MySQL
	 * 
	 * @var string
	 */
	const HOST = '127.0.0.1';
 
	/**
	 * Usuario para el servidor MySQL
	 * 
	 * @var string
	 */
	const USER = 'root';
 
	/**
	 * Contraseña para el servidor MySQL
	 * 
	 * @var string
	 */
	const PASS = '';
 
	/**
	 * Base de Datos con la que trabajaremos
	 * 
	 * @var string
	 */
	const DB = 'sge';
 
	/**
	 * Atributo estático que contiene la conexión a la base de datos
	 * 
	 * @var resource
	 */
	private static $_conexion;
 
	/**
	 * Resource de la última consulta hecha
	 * 
	 * @var resource
	 */
	private $_consulta;
 
	/**
	 * Error de MySQL
	 * 
	 * @var string
	 */
	private $_error;
 
	/**
	 * Cuando se crea el objeto verifica que no se haya conectado
	 * 
	 * @param string $host Nombre de host
	 * @param string $user Nombre de usuario
	 * @param string $pass Contraseña para el usuario
	 * @param string $db Base de datos con la que trabajaremos
	 * @return BaseDeDatos
	 */
	public function __construct($host = self::HOST, $user = self::USER, $pass = self::PASS, $db = self::DB)
	{
		// Verificamos si no hay una conexión anterior
		if ( self::$_conexion == null )
		{
			// Nos conectamos a MySQL
			$conexion = mysql_connect($host, $user, $pass);
 
			// Verificamos que no hay error en la conexión
			if ( $this->_verificarSiHayError($conexion) == false )
			{
				// Seleccionamos la base de datos
				mysql_select_db($db, $conexion);
			}
 
			// Verificamos que no haya error al seleccionar la base de datos
			if ( $this->_verificarSiHayError($conexion) == false )
			{
				// Si no hubo ningún problema establecemos la conexión en el atributo estático
				self::$_conexion = $conexion;
			}
		}
	}
 
	/**
	 * Verifica si hay un error en la última ejecución de MySQL y formatea el error en el atributo $_error
	 * 
	 * @param resource $conexion
	 * @return boolean
	 */
	private function _verificarSiHayError($conexion = null)
	{
		// Inicializamos el error diciendo que no hay error
		$this->_error = '';
 
		// Si el parámetro es nulo entonces tomo la conexión interna
		if ( $conexion == null )
		{
			$conexion = self::$_conexion;
		}
 
		// Verificamos si hay un error en la última ejecución de MySQL
		if ( mysql_errno( $conexion ) != 0 )
		{
			$this->_error = "(" . mysql_errno( $conexion ) . ") " . mysql_error( $conexion );
			return true;
		}
 
		return false;
	}
 
	/**
	 * Pregunta si hay un error en la ultima acción sobre MySQL
	 * 
	 * @return boolean
	 */
	public function ocurrioUnError()
	{
		return $this->_verificarSiHayError();
	}
 
	/**
	 * Verifica si hay un error en la ultima sentencia para devolverlo, de lo contrario devuelve false
	 * 
	 * @return boolean|string
	 */
	public function getError()
	{
		// Verificamos si se ha establecido algún error
		if ( $this->_error == '' )
		{
			return false;
		}
 
		return $this->_error;
	}
 
	/**
	 * Ejecuta una consulta a la base de datos y devuelve true o false dependiendo si tuvo éxito en la ejecución
	 * 
	 * @param string $consulta
	 * @return boolean
	 */
	public function query($consulta)
	{
		$this->_consulta = mysql_query($consulta, self::$_conexion);
 
		return $this->_verificarSiHayError();
	}
 
	/**
	 * Devuelve el último id que se generó al insertar un registro
	 * 
	 * @return integer
	 */
	public function getUltimoIdInsertadio()
	{
		return mysql_insert_id(self::$_conexion);
	}
 
	/**
	 * Devuelve una fila como un array
	 * 
	 * @param int $modo Por defecto toma el valor de MYSQL_ASSOC
	 * @return array|boolean
	 */
	public function fetchArray($modo = MYSQL_ASSOC)
	{
		// Verificamos que no haya error en la consulta ejecutada
		if ( $this->_verificarSiHayError() == true )
		{
			return false;
		}
 
		$fila = mysql_fetch_array($this->_consulta, $modo);
 
		return $fila;
	}
 
	/**
	 * Devuelve una fila como un objeto
	 * 
	 * @return object|boolean
	 */
	public function fetchObject()
	{
		// Verificamos que no haya error en la consulta ejecutada
		if ( $this->_verificarSiHayError() == true )
		{
			return false;
		}
 
		$fila = mysql_fetch_object($this->_consulta);
 
		return $fila;
	}
}

En la misma ventana del navegador que obvtuve los problemas anteriores tengo este problema

Fatal error: Call to undefined method empleado::_verificarSiHayError() in C:\xampp\htdocs\sge\includes\php\BaseDeDatos.php on line 195.- No se porque no reconoce a VerificarSiHayError.

Les agradeceria su ayuda.
Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

No me reconoce variable POO

Publicado por xve (5523 intervenciones) el 18/11/2013 11:21:27
Hola Giuliano, estoy revisando tu código, y no veo donde defines las variables que envias al inicializar la clase empleados...

1
$oEmpleado = new empleado($id,$ape,$leg,$nom);
Aquí envías 4 variables al constructor de la clase empleado, pero estas variables no estan definidas... no tienen contenido, no?

Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No me reconoce variable POO

Publicado por Giuliano (39 intervenciones) el 18/11/2013 11:34:52
Me olvide de mostrar el codigo de la clase empleado, y de decirte ademas que debo obtener esos datos de una tabla en una base de datos.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php
require_once("../../sge/includes/php/BaseDeDatos.php");
 
class empleado{
    private $_idEmpleado;
    private $_apellido;
    private $_legajo;
    private $_nombre;
 
    public function __construct($id,$ape,$leg,$nom){
        $this->_idEmpleado=$id;
        $this->_apellido=$ape;
        $this->_legajo=$leg;
        $this->_nombre=$nom;
    }
    public function setIdEmpleado($idEmpleado){
        $this->_idEmpleado=$idEmpleado;
    }
    public function setApellido($apellido){
        $this->_apellido=$apellido;
    }
    public function setLegajo($legajo){
        $this->_legajo=$legajo;
    }
    public function setNombre($nombre){
        $this->_nombre=$nombre;
    }
    public function getIdEmpleado(){
        return $this->_idEmpleado;
    }
    public function getapellido(){
        return $this->_apellido;
    }
    public function insertar(){
        $SQL="insert into Empleado values";
        $SQL.="'','$this->_apellido',$this->_legajo,'$this->_nombre'";
        $bd=new BaseDeDatos();
        $bd->query($SQL,$bd);
    }
    public function getAll(){
        $SQL="select * from empleado";
        $_bd=BaseDeDatos::fetchObject($SQL);
    return $_bd;
    }
}
?>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

No me reconoce variable POO

Publicado por xve (5523 intervenciones) el 18/11/2013 14:31:40
Hola Giuliano, ahí tienes el problema... cuando llamas a la clase empleados todavía no tienes esos datos, por eso te informa...

Solo tienes que hacer la consulta que haces referencia y pasar esos valores a la clase empeados.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No me reconoce variable POO

Publicado por Mari Carmen (145 intervenciones) el 18/11/2013 14:37:24
Vaya tela, tienes un cacao tremendo!!!
1 La libreria (y ya soy una pesada ^^) mysql es una librería que está obsoleta. En su lugar usa la librería mysqli que adamas puedes usar como una clase y extenderla con una clase hija como la que tienes por BaseDeDatos.
2 Como dice xve las variables $id,$ape,$leg,$nom no están definidas en ninguna parte.
En empleados.php cuando llamas a la clase Empleado (que valga decirlo no existe ya que la clase es empleado) la llamas sin variables de inicialización y eso deberías tenerlo presente a la hora de crear el constructor de la clase empleado.
Y en el archivo lista.php cuando llamas a la clase empleado (ahora si está definida) no le pasas ninguna variable definida. Ni en los includes que haces de BaseDeDatos.php ni en Empleado.php.
3 En ese mismo archivo, lista.php justo después de crear el objeto empleado intentas hacer un getAll() y por desgracia, en la clase empleado, no se ha definido aun ningún objeto BaseDeDatos para poder hacer la conexión a la BBDD.

Seguro que hay más pero esos creo que son los principales.
Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No me reconoce variable POO

Publicado por Giuliano (39 intervenciones) el 18/11/2013 16:21:44
Antes que nada muchas gracias por responderme.
Entonces donde deberia definir las variables $id,$ape,$nom,$leg para que tomen el valor del registro en la base de datos? Estan como parametro en el constructor del empleado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No me reconoce variable POO

Publicado por Elier (92 intervenciones) el 25/11/2013 22:58:55
Podrías usar un ORM para que te sea mas facil el acceso a los datos y te centres mas en la logica de la aplicacion.

por ejemplo

http://propelorm.org/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar