AJAX, PHP, MySQL - Consulta de registros

Realizaremos un sencillo ejemplo de como recuperar registros de una tabla con AJAX.

Este ejemplo lo he probado en IE, Firefox, Opera y Netscape sin darme errores.

Es un ejemplo sencillo si estamos familiarizados con PHP y MySQL.Aún así dare algunas explicaciones generales sobre el código.

Creacion de la tabla

Entonces empezemos creando un tabla pequeña llamada empleados, no tendrá mas que 5 campos: idempleado, nombres, departamento y sueldo; además insertaremos algunos datos.

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);

Creamos las funciones en javascript

Ahora escribiremos 2 funciones, en la primera ( objetoAjax ) tiene como objetivo elegir el objeto XMLHttpRequest dependiendo del navegador, y la segunda función ( MostrarConsulta(parametro) ) tendrá como objetivo pedir los datos y mostrarlos en una capa (<div>) que especificaremos. Estas funciones lo podemos incluir en un archivo javascript (.js) al cual llamaremos ajax.js

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');
	ajax=objetoAjax();
	ajax.open("GET", datos);
	ajax.onreadystatechange=function() {
		if (ajax.readyState==4) {
			divResultado.innerHTML = ajax.responseText
		}
	}
	ajax.send(null)
}

Pedir los datos con PHP

En esta parte escribiremos un script en PHP para realizar una consulta de todos los registros de la tabla empleados en la base de datos.

consulta.php

<?php
//Configuracion de la conexion a base de datos
$bd_host = "localhost"; 
$bd_usuario = "root"; 
$bd_password = ""; 
$bd_base = "ribosomatic"; 

$con = mysql_connect($bd_host, $bd_usuario, $bd_password); 

mysql_select_db($bd_base, $con); 

//consulta todos los empleados

$sql=mysql_query("SELECT * FROM empleados",$con);

//muestra los datos consultados
echo "</p>Nombres - Departamento - Sueldo</p> n";
while($row = mysql_fetch_array($sql)){
	echo "<p>".$row['nombres']." - ".$row['departamento']." - ".$row['sueldo']."</p> n";
}
?>

Formulario de consulta

Finalmente creamos un archivo html que contendrá un Form y un Button el cual realizará la consulta.

consulta_empleados.html

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<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>
<p>Consultar registros con ajax</p>"</p>"<p><!-- 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>

En resumen

Para consultar los datos de una tabla hemos realizado lo siguiente:

  • Una función para crear el objeto XMLHttpRequest dependiendo del navegador.
  • Una función que realizará la petición de datos e indicará donde se mostrarán estos.
  • Una script en PHP que consulta los datos y los muestra.
  • Y finalmente el formulario de consulta.

Como podrán apreciar el código es realmente sencillo de entender, aún así daré mas detalles si preguntan. Pueden descargar el archivo si desean. Hasta otra oportunidad.

Comentarios

  1. avatar Hamilton 2009-06-30 12:15:24 72 Excelente post men...graxias por el aporte y muy buen ejemplo.
    Te comento que al ejecutarlo no me muestra nada, no es un err de la consulta puesto q al ejecutar solo el erch consulta.php va de lujo muestra datos y todo.
    el err se da q al dar clik en el boton no se llena de datos la div.
    Estoy incursionando recientemente en lo q es ajax así q me gustaría q me ayudaras a q este tu ejemplo corra bien sería un buen inicio para comenzar a entender ajax
    pdd:
    esperare tu respuesta men o la de alguno de ud’s en los coments o a mi mail graxias por su contribución.
  2. avatar Gustavo Beauregard Noriega 2009-04-26 18:45:15 71 Muy bueno el tutorial. Le falta agregar al código php en consulta.php los delimitadores para los espacios, es decir, en lugar de que quede así:

    echo "</p>Nombres - Departamento - Sueldo</p> n";

    debería de quedar así

    echo "</p>Nombres - Departamento - Sueldo</p> \n";
  3. avatar jorge 2009-03-28 10:33:12 70 para las tildes, ñ y otros caracteres puedes probar a usar en el head la codificacion del euro
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-15" />
  4. avatar fnovoa 2009-01-25 21:59:58 69 solución a para la consulta sobre tíldes y ñ!!..

    pasar las variables por utf8_encode($varible);
    slds!!!
  5. avatar amenito 2009-01-18 08:45:46 68 esta interesante la informacion
  6. avatar Robert 2009-01-08 20:57:53 67 Se me ha ocurrido que se podría poner directamente el div de destino pasandola como variable desde consulta_empleados.html poniendo onsubmit="MostrarConsulta('consulta.php','divDestino')"; return false"

    y en el ajax.js
    function MostrarConsulta(datos,destino){
    divResultado = document.getElementById('destino');

    para no tener que estar abriendo el ajax.js cada vez y hacerlo más ameno. Tb recortaría bastante el tamaño del archivo ajax.js.

    Me equivoco :S?
  7. avatar damis chiari 2009-01-07 18:41:26 66 Excelente post!!!
  8. avatar mangamax 2008-12-29 15:48:10 65 hola tengo problema con los div y la carga de javascrip dentro de ellos
  9. avatar Roberto G 2008-12-28 20:44:24 64 buen codigo amigo... corto pero preciso.. muchas gracias..
  10. avatar Ana Carolina 2008-12-18 10:19:09 63 Muy bueno este ejemplo, muy claro y conciso... me toca aplicarlo a una aplicacion que tiene dos listas de seleccion enlazadas, y me a contribuido mucho este codigo gracias.

Dejar un comentario