Bueno el problema que tengo es:
Notice: Undefined variable: aItems in C:\xampp\htdocs\sge\empleado\lista.php on line 47
Se trata de un ejercicio que me dieron de POO, en el que tengo que crear una clase empleado, con 4 atributos que son los campos que tienen en la tabla empleados. El archivo lista.php, contiene el html para mostrar una tabla con todos los empleados. Para esto en la clase empleado debe haber un metodo getAll(), que devuelve todos los registros de la tabla empleado. Esto es sencillo:
Pero la complicacion ocurre porque ya me dieron un fichero BaseDeDatos ya hecho y que no puedo modificar, lo que debo hacer es crear en otro archivo la clase empleado con los metodos insertar modificar y getAll.
El archivo BaseDeDatos es:
Código PHP:
<?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;
}
}
Y el archivo empleado.php que muestra la lista de empleados con un botoncito de modificar y otro de borrar:
Código PHP:
<?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ó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>
El archivo que yo debo hacer es:
Código PHP:
<?php
class empleado{
private $_idEmpleado;
private $_apellido;
private $_legajo;
private $_nombre;
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);
}
public function getAll(){
$SQL="select * from empleado";
$bd=new BaseDeDatos();
$bd->query($SQL);
}
}
$oEmpleado=new empleado();
?>
Bueno pense en colocar los atributos, los getters y setters obviamente.
Pero vamos al grano:
El metodo insertar tiene la consulta sql, y llama al metodo del archivo BaseDeDatos para ejecutar esa consulta.
Al igual que insertar asi lo hace getAll, tiene el select y luego llama a "query", la verdad no se que puede estar ocurriendo, pienso que debo incluir el archivo BaseDeDatos.php en Empleado.php? o debo llamar de otra forma a los metodos?
Les voy a agradecer mucho si me pueden ayudar.