Consulta de Datos con AJAX + Clases en PHP

Hablar de Programación Orientada a Objetos (POO) es hablar de clases (y otras funcionalidades) que nos permite escribir código flexible y sobre todo reutilizable. Para muchos resulta dificultoso y tedioso, pero una vez construida nuestra clase podemos hacer uso de ella para cualquier otro desarrollo. Los lenguajes actuales implementan el desarrollo con POO y PHP no se podia quedar atrás (aunque en lo personal no sé si implementa todas las caracteristicas de la POO).

En esta oportunidad, vamos a ver como usar POO en los ejemplos anteriores de AJAX+PHP, en este caso Consulta de datos. Empezemos:

Tabla Empleado en MySQL

CREATE TABLE empleados ( 
 idempleado int NOT NULL auto_increment,
 nombres varchar(32) NOT NULL,
 departamento varchar(40)NOT NULL,
 sueldo double,
 KEY id(idempleado)
)TYPE=MyISAM;


INSERT INTO empleados VALUES (1, 'Juan Perez', 'Informatica',500.00);
INSERT INTO empleados VALUES (2, 'Laura Morales', 'Contabilidad',550.00);
INSERT INTO empleados VALUES (3, 'Luis Gutierrez', 'Administracion',850.00);
INSERT INTO empleados VALUES (4, 'Pedro Solar', 'Informatica',500.00);
INSERT INTO empleados VALUES (5, 'David Vilchez', 'Contabilidad',550.00); 

Creando Clases y Métodos

Creamos una Clase para la conexión con la Base de Datos, el método conectar() se encargará de verificar y realizar la conexión con la base de datos. A este archivo lo llamamos DBManager.php .

<?php 
 //esta clase nos permitira conectarnos a la base de datos
 class DBManager{
  var $conect;
  //Método constructor
  function DBManager(){
  }
  //Método que se encargará de la verificar y realizar
  //la conexión
  function conectar() {
   if(!($con=@mysql_connect("localhost","root",""))){
    echo"Error al conectar a la base de datos"; 
    exit();
   }
   if (!@mysql_select_db("ribosomatic",$con)) {
    echo "Error al seleccionar la base de datos"; 
    exit();
   }
   $this->conect=$con;
   return true; 
  }
 }
?>

Creamos una Clase para los procesos relacionados con el Empleado, como por ejemplo: Consultar sus datos. Para ello el método consultar()realizará este proceso . Previamente, hacemos referencia al archivo BDManager.php para realizar la conexión. A este archivo de la Clase Empleado lo llamaremos cEmpleado.php .

<?php 
 include_once("DBManager.php");
 //implementamos la clase empleado
 class cEmpleado{

  //constructor 
  function cEmpleado(){
  }

  // consulta los empledos de la BD
  function consultar(){
   //creamos el objeto $con a partir de la clase DBManager
   $con = new DBManager;
   //usamos el metodo conectar para realizar la conexion
   if($con->conectar()==true){
    $query = "select * from empleados order by nombres";
    $result = @mysql_query($query);
    if (!$result)
     return false;
    else
     return $result;
   }
  }

 }
?>

El resto es lo mismo, pero....

Ahora realizamos una consulta a los datos, referenciamos al archivo cEmpleado.php que contiene la Clase cEmpleado. Creamos el objeto $objempleados y usamos el método consultar() para que la consulta de los datos, y luego mediante un bucle listamos los datos. Este archivo lo llamamos consulta.php.

<?php
 include_once("cEmpleado.php");
 //Sleep deja inactivo el script por n segundos
 //n es un parametro, en el ejemplo 1 segundo
 //esto para poder apreciar el gif animado
 sleep(1);
 //creamos el objeto $objempleados de la clase cEmpleado
 $objempleados=new cEmpleado;
 //la variable $lista consulta todos los empleados
 $consulta= $objempleados->consultar();
 //muestra los datos consultados
 echo "</p>Nombres - Departamento - Sueldo</p> n";
 while($row = mysql_fetch_array($consulta)){
  echo "<p>".$row['nombres']." - ".$row['departamento']." - ".$row['sueldo']."</p> n";
 }
?>

Ahora las funciones JavaScript, entre ellas la que crea el objeto XMLHttpRequest para trabajar con AJAX. Este archivo se llama ajax.js .

function objetoAjax(){
 var xmlhttp=false;
 try {
  xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
 } catch (e) {
  try {
   xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  } catch (E) {
   xmlhttp = false;
  }
 }
 if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
  xmlhttp = new XMLHttpRequest();
 }
 return xmlhttp;
}

function MostrarConsulta(datos){
 divResultado = document.getElementById('resultado');
 divResultado.innerHTML= '<img src="anim.gif">';
 ajax=objetoAjax();
 ajax.open("GET", datos);
 ajax.onreadystatechange=function() {
  if (ajax.readyState==4) {
   divResultado.innerHTML = ajax.responseText
  }
 }
 ajax.send(null)
} 

Finalmente, el archivo index.html que contendrá un formulario y un botón que al ser pulsado, llamara a la función Javascript MostrarConsulta() que se enlaza al archivo consulta.php y el resultado es mostrado dentro de la etiqueta <div id="resultado"></div>.

<html>
<head>
<title>Consulta Registro con AJAX</title>
<!-- referenciamos al archivo ajax.js donde se encuentra nuestra funcion objetoAjax-->
<script language="JavaScript" type="text/javascript" src="ajax.js"></script>
</head>
<body>
<!-- En "onsubmit" escribimos la función 'MostrarConsulta' que creamos en javascript, con su parametro que es el archivo que vamos a mostrar, en este caso 'consulta.php'-->
<form name="consulta" action="" onSubmit="MostrarConsulta('consulta.php'); return false">
<label>
<input type="submit" value="Consultar" />
</label>
</form>
<div id="resultado"></div>
</body>
</html> 

Como se podrá apreciar, el uso de Clases en PHP hace que nuestro código se reutilizable, en próximos ejemplos veremos como seguir implementando otros métodos a la Clase Empleado, como por ejemplo Insertar, Actualizar y Eliminar registros. Puedes ver el ejemplo en acción o descargar los archivos.

Comentarios Comentarios formato RSS

  1. avatar Orlando 2010-01-16 13:44:39 8 Listo, mi problema era que estoy usando PHP 5 y el ejemplo tiene sintaxis de PHP 4.
  2. avatar orlando 2010-01-15 17:23:40 7 Rayos, soy una basofia de basofias. Simplemente no pude conectarme a la base de datos siquiera.

    En pantalla no me imprime ni un mensaje de error, pensé que podría ser la versión de mi PHP, pero es la 5.2.9, se supone que soporte clases.

    Una duda, no encontre nada en google, ¿Para que le ponen un @ antes de mysql_connnect?

    Saludos.
  3. avatar Andersson 2009-12-29 09:36:37 6 oye gracias amigo... muy buen aporte... ma hacia falta lo de BDmanager.php... no lo tenia gracias...
  4. avatar Emmanuel Avila 2009-12-11 15:59:41 5 Hola, me sirvió de mucho esta explicación, así que solo me queda decir ¡¡¡muchas gracias!!!!
  5. avatar jesus 2009-10-27 08:13:48 4 hola tu programa esta muy bueno pero cuando hago la consulta y muestro por el index.html el resultado de archivo.php quiero insertar un calentario pero no se muestra el calendario posiblemente por que esta adentro de un div
  6. avatar Pedro Pablo 2008-07-22 13:14:03 3 Muchas gracias lo intentaré...
    Buen Blog<img style="border:0px;" src="/img/caritas/feliz.gif" alt="feliz" title="Feliz" width="18" height="18"> </img>
  7. avatar jesusvld 2007-02-21 10:10:13 2 registerFunction? no. No te conocimiento de esto. Si conoces de ello, puedes, si gustas, explicarlo. <img style="border:0px;" src="/img/caritas/feliz.gif" alt="feliz" title="Feliz" width="18" height="18" /> Saludos
  8. avatar Alejandro Moreno 2007-02-20 19:00:48 1 Hola, me gustaria saber si has podido implementar clases dentro de registerFunction....

    con el fin de aplicar a cabalidad el paradigama de la POO

    gracias x tu tiempo
    Cordialmente
    Alejandro

Dejar un comentario