Consulta de registros en Ajax (2)

02-09-2006 AJAX 32089 hits (100 %) 55 comentarios

En esta oportunidad abordaremos nuevamente el tema de consulta a base de datos MySql haciendo uso de ajax + php. Pero la forma de realizar la consulta será distinta al anterior ejemplo.

Objetivo

Deseamos hacer lo siguiente: Mostrar en una lista desplegable los nombres de todos los clientes y al momento de hacer clic en el deseado, en la parte inferior, se muestren sus datos.

Consideraciones previas

Analicemos que parte o partes programaremos en PHP o en JavaScript. Necesitamos el objeto XMLHttpRequest (eso ni dudarlo) asi que lo incluiremos en un archivo llamado ajax.js.

Ahora seguimos analizando y como se nos pide que los nombres de los clientes se muestren en la lista desplegable, entonces escribiremos en PHP un script que se conecte a la base de datos y muestre solo los nombres de todos los clientes, llamaremos a éste lista.php.

Pero se indica que al hacer clic en el nombre del cliente deseado se muestre sus datos. Esto implica 2 procesos, 1) trabajar con un evento tal que al hacer clic realize el proceso, esto puede ser una función en JavaScript y lo podemos incluir en el archivo ajax.js, llamaremos a la función pedirDatos(); y 2) un script PHP que se conecte a la base de datos y muestre todos los datos del cliente deseado, llamamos a este script datoscliente.php.

Ya que lista.php y datoscliente.php se conectan a la base de datos, escribimos un script para que realice una sola conexión, llamémosla conexion.php.

Finalmente creamos un index.php que contendrá la parte principal de nuestro ejemplo a desarrollar.

Manos a la obra

Aquí la tabla clientes con algunos datos.

CREATE TABLE `clientes` (
  `id` INTEGER NOT NULL AUTO_INCREMENT,
  `nombres` VARCHAR(45) NOT NULL DEFAULT '',
  `direccion` VARCHAR(45) NOT NULL DEFAULT '',
  `telefono` VARCHAR(10) NOT NULL DEFAULT '',
  `email` VARCHAR(45) NOT NULL DEFAULT '',
  PRIMARY KEY(`id`)
)
ENGINE = InnoDB;

INSERT INTO clientes (nombres, direccion, telefono, email) VALUES
('Victor Jimenez','Av Union 234','457522','victor_j@latin.com'),
('Ivan Fernandez','Jr Mansiche 4564','329005','fernivan@surper.net'),
('Carlos Salazar','Av Peru 878','457845','salazar_234@minerva.viz'),
('Ever Mendez','Av Arequipa 1258','220585','webmaster@yaohi.com.pe'),
('Juan Linares','Pj Villar Int 2','9654563','gutiman@coolmain.ru'),
('Julio Gutierrez','Almendros 984','9784512','juliter@menzat.nu.pe'),
('Manuel Villalobos','Av Cortijo 8282','220578','manu@latin.es');

Empezemos con el script que realizará la conexión a la Base de Datos.

conexion.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);
?>

Escribimos dos funciones en JavaScript para 1) usar el objeto XMLHttpRequest y 2) pedir el resultado de la consulta el cual se mostrara en una capa indicada.

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 pedirDatos(){
	//donde se mostrará el resultado
	divResultado = document.getElementById('resultado');
	//tomamos el valor de la lista desplegable
	nom=document.formulario.lista.value;

	//instanciamos el objetoAjax
	ajax=objetoAjax();
	//usamos el medoto POST
	//archivo que realizará la operacion
 //datoscliente.php
	ajax.open("POST", "datoscliente.php",true);
	ajax.onreadystatechange=function() {
		if (ajax.readyState==4) {
			//mostrar resultados en esta capa
			divResultado.innerHTML = ajax.responseText
		}
	}
	ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	//enviando los valores
 ajax.send("nombres="+nom)
}

Ahora a listar los nombres de los empleados. Este script realizar un SELECT ... FROM ... del campo NOMBRES de la tabla clientes e incluye los elementos en una lista desplegable. Nótese que a la lista desplegable se le incluye, en el evento onchange, la función pedirDatos(), la cual especificamos en el archivo ajax.js.

lista.php

<?php
require('conexion.php');
//seleccionamos solo el nombre de los clientes
$sql=mysql_query("SELECT nombres FROM clientes",$con);
?>
<select name="lista" onchange="pedirDatos()">
<?php
while($row = mysql_fetch_array($sql)){
echo "<option>".$row['nombres']."</option>";
}
?>
</select>

Seguimos con mostrar los resultados, para ello hacemos un SELECT ... FROM ... de los campos dirección, telefono y email, a través del nombre del cliente, el cual será capturado cuando lo seleccionemos de la lista desplegable.

datoscliente.php

<?php
require('conexion.php');
//capturar el nombre del cliente
$nom=$_POST['nombres'];
//seleccionamos los datos del cliente por su nombre
$sql=mysql_query("SELECT * FROM clientes WHERE nombres='".$nom."'",$con);
$row = mysql_fetch_array($sql);
//mostrando el resultado
echo "<p><strong>Direccion</strong></p><p>".$row['direccion']."</p>";
echo "<p><strong>Telefono</strong></p><p>".$row['telefono']."</p>";
echo "<p><strong>Email</strong></p><p>".$row['email']."</p>";
?>

Finalmente, un archivo index.php que contendrá la parte principal de nuestro desarrollo.

index.php

<html>
<head>
<title>Consulta de datos</title>
<script language="JavaScript" type="text/javascript" src="ajax.js"></script>
</head>
<body>
<p>Este ejemplo muestra como realizar una consulta de los registros de una tabla usando un control de lista.</p>
<form name="formulario" action="">
<?php
include('lista.php');
?>
</form>
<div id="resultado" style="border:1px solid #FF0000; color:#000099;width:400px;">
</div>
</body>
</html>

El resultado: Cuando seleccionamos un nombre de cliente de la lista desplegable, en la parte inferior de la pagina se mostrará los datos de éste, como su dirección, teléfono y email. Si desean ver el resultado pueden descargarlo o apreciarlo en la sección Ejemplos.

Actualizacion [25·09·06]

Según algunos comentarios (abajo expuestos) la aplicación no funciona en Internet Explorer, sin embargo corregimos el error. A continuación detallamos donde fue la falla.

Corriga el archivo lista.php por el siguiente código:

<?php
require('conexion.php');
//seleccionamos solo el nombre de los clientes
$sql=mysql_query("SELECT nombres FROM clientes",$con);
?>
<select name="lista" onchange="pedirDatos()">
<?php
while($row = mysql_fetch_array($sql)){
echo "<option value="".$row['nombres']."">".$row['nombres']."</option>";
}
?>
</select>

Como se dará cuenta, anteriormente no especificamos ninguno atributo value para las opciones (<option>) de la etiqueta <select>, es por ello que IE no reconocía ninguno valor de la lista y cuando realizaba la consulta no ocurría nada. El archivo comprimido del ejemplo también esta corregido. Gracias por su paciencia.

autor image Jesus Liñan
Programador de software, especializado en web sacando provecho de todos los recursos de la internet para el desarrollo y diseño web y compartiendolo con todos. Seguir @jesusvld

Advertisement

55 comentarios a "Consulta de registros en Ajax (2)"

  1. Agradezco mucho el que den a conocer estas nuevas técnicas en forma tan clara y con valiosos ejemplos.., les felicito..., y muchas gracias.
    By Mafuen
  2. Hola, estoy intentando hacer lo mismo pero con otra tabla y me da error en $nom = _POST['name']
  3. esta muy bueno el tutorial, pero tengo un problema que nada mas me muetra los resultados que estan en la bd, pero al momento que le doy clic a algunos de mis registros no puedo darle clic para que aparesca de forma asc o desc, como le ago alguien me podria ayudar muchas gracias......
  4. Excelente tutorial!
    Sos el mejor!
  5. Hola a todos!!

    Soy nuevo con el diseño de páginas web y me encuentro haciendo mi tesis de grado, por lo que necesito su ayuda muchachos por favor.

    Mi problema es el siguiente, tengo un formulario donde me aparecen una serie de datos relacionados a los clientes de una empresa, como por ejemplo: código, nombre, dirección, telefono, etc.

    tengo una una página con un form en donde existe un SELECT que carga todos los nombre de los clientes, por los momentos carga todos los nombres perfectamente, pero no he logrado hacer que cuando se haga click en un nombre especifico los demás INPUT se carguen con los datos de ese cliente.

    El código del SELECT es el siguiente:
    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    <?php
    $sql=mysql_query("SELECT * FROM clientes");
    ?>

    <select name="lista" id="lista" onchange="pedirDatos()" >

    <?php
    while($row = mysql_fetch_array($sql)){
    echo "<option value="".$row['nombre']."">".$row['nombre']."</option> n";
    }
    ?>
    </select>
    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    Desde mi página INDEX llamo a un archivo ajax.js que deberia traerme los datos de ese cliente para poder llenar los demás INPUT, su código es el siguiente:

    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    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 pedirDatos(){
    //donde se mostrará el resultado
    divResultado = document.getElementById('lista');
    //tomamos el valor de la lista desplegable
    nom=document.frm_caso.lista.value;

    //instanciamos el objetoAjax
    ajax=objetoAjax();
    //usamos el medoto POST
    //archivo que realizará la operacion
    //datoscliente.php
    ajax.open("POST", "casos.php",true);
    ajax.onreadystatechange=function() {
    if (ajax.readyState==4) {
    //mostrar resultados en esta capa
    divResultado.innerHTML = ajax.responseText
    }
    }
    ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    //enviando los valores
    ajax.send("nombre="+nom)
    }
    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    Hasta el momento tal como les dije el SELECT se llena sin problema alguno, el ONCHANGE no me esta regresa los datos que necesito.

    Por favor ayudenmeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
  6. hola! oye me super urge saber porque la lista me aparce vacia! no me aparece ningun error de conexión con la bd ni nada! porfavor ayuda!
  7. Conmigo funciona ala perfeccion pero si en vez de una lista, quiero un campo de texto donde cada cliente pueda teclear su nombre y no exponer los demas nombres........
    espero me puedan resolver esto gracias
  8. Hola, muchas gracias por el tutorial y el código que me han servido de maravilla ya que recién estoy empezando con lo de ajax. Tengo una duda, usando este mismo código tengo un comportamiento extraño en las consultas ... cuando ingreso a la pagina index.php y trato de seleccionar el primer nombre de la lista, no me muestra nada, y puedo estar todo el día tratando y no me muestra nada, pero si elijo uno cualquiera que no sea el primero de la lista inmediatamente me muestra los datos como corresponde, y luego de esto al elegir al primero si me lo muestra. A que se puede deber?, a alguien mas le pasa esto?.
  9. Excelente Tutorial, despeje muchas dudas, Gracias.
  10. compadre usted si que hace todo facil de implementar a lo que uno quiere felicidades!!!
  11. cargar mas ...