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.
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
registerFunction? no. No te conocimiento de esto. Si conoces de ello, puedes, si gustas, explicarlo. Saludos
Muchas gracias lo intentaré…
Buen Blog
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
Hola, me sirvió de mucho esta explicación, así que solo me queda decir ¡¡¡muchas gracias!!!!
oye gracias amigo… muy buen aporte… ma hacia falta lo de BDmanager.php… no lo tenia gracias…
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.
Listo, mi problema era que estoy usando PHP 5 y el ejemplo tiene sintaxis de PHP 4.
hola, tu ejemplo esta muy bueno pero quisiera saber si pudieras publicar un ejemplo donde los datos tomados desde el formulario sean tratados en el ejemplo mediante los metodos set y get.
Hola solo escribo para decir lo agredecido que estoy con este tipo de post muy hermosos en contenido y la versatilidad que aplica al explicarlo y descargar el demo para modificarlo…esta paáginas es la mejor que he conocido relacionado al php no hay comparación he aprendido muchas cosas..a lo cual respondo cuando preguntan quien te enseño yo solo digo “Risbosomatic” de todo corazón a todos los calaboradores muchas gracias…
La verdad tanto codigo insulso, pudiendo simplificarse en un simple documento php
Hola es muy bueno tu programa, pero una consulta lo intento correr dentro de un menu hecho con div y lo llamo con Ajax, pero ahi no me realiza la consulta porque podria ser??? me sale el boton pero no realiza la consulta.
buenas tardes tu ejemplo es muy bueno pero tengo una duda como manipulo los datos de la consulta ya en javascript por ejemplo si en mi base tengo salarios quiero que me de el total y para eso necesito manipular los datos.
aclaro que soy principiane y de antemano gracias.
gracias a dios! hoy existe $.ajax(), gracias jquery por existir!!!!