Consulta de registros en Ajax (2)

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.

Compartir/Guardar artículo

Comentarios

  1. avatar jesusvld 2008-09-18 17:10:47 44 Ramiro, eso tiene que ver con las cabeceras del html y también con juego de caracteres de mysql. ambos deben ser UTF-8. Es que el lenguaje javascript trabaja con ese juego de caracteres.
  2. avatar Ramiro 2008-09-18 09:13:06 43 Hola, Excelente el manual , muchos exitos por tu pagina es la mejor y siempre actualizada.
    Tenia una consulta acerca de este ejemplo, y es que cuando por ejemplo tengo en la base de datos nombres con ñ o & no me sale nada , porque no funciona? supongo que tiene algo que ver con el iso :D y bueno alguna sugerencia para resolver este pequeño problema
  3. avatar Carol 2008-09-15 21:19:15 42 Hola, literalmente soy novata en la programación como tal y pos soy honesta si digo que no es mi área favorita, pero a solo pasantías de graduarme creo que eso ya paso a segundo plano, mi detalle es el siguiente, estoy realizando como pasantía un generador de reportes utilizando php, fpdf y gestor postgres, y lo que debo hacer es: de varias tablas visualizadas en pantalla, seleccionar campos de cada una de ellas e irlos mostrando en la parte inferior de la página, cuando el usuario haya seleccionado todos los campos que quiera, entonces generar el reporte, el cual saldrá en formato pdf. Hasta ahora logró generar archivos pdf pero mostrando todos los campos de una sola tabla. Mi pregunta es: ¿Saben de alguna manera para seleccionar campos de varias tablas, almacenarlos y luego generar el archivo pdf con esos campos seleccionados?? No saben el favor inmenso que me harán!!! Gracias de Antemano..
    P.D. si pueden darle cualquier sugerencia a esta venezolana desesperada antes de que finalice el mes, muchísimo mejor!!! ahí esta mi mail....
  4. avatar jesusvld 2008-08-03 09:21:40 41 Hola Carlos:

    Tienes que escapar las lineas con comillas, asi:

    echo " Si hay comillas de esta forma (\") tienes que escaparlas con la barra invertida, para que no se confundan con las comillas de inicio y cierre del comando echo";

    echo 'si usas comillas simples puedes colocar comillas (") y en ese caso no es necesario escaparlas';
  5. avatar carlos 2008-08-03 08:31:56 40 me sale un error en el archivo lista.php

    este es el codigo:

    <?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>


    me sale este error:

    Parse error: syntax error, unexpected '"', expecting ',' or ';' in C:\xampp\htdocs\consulta2\lista.php on line 9
  6. avatar KEMO 2008-04-21 15:34:30 39 Para poner imagenes con session
    <img src="foto/<?=$_SESSION[foto]?>" border="0" width="65" height="65">
    Espero esto te sirva Ghis
  7. avatar Ghis 2007-12-09 23:33:55 38 Hola primero que todo gracias por la ayuda que nos brindan...Mi pregunta es como puedo obtener junto con todos los otros datos una foto de la base de datos y que me la nuestre por pantalla...Gracias Totales
  8. avatar LUIS GABRIEL MOLINA 2007-12-04 13:39:03 37 Hola, tengo una dificultad y es urgente por favor..

    resulta que la base de datos que estoy usando es de la tabla "productos". tiene 3 campos: prod, des, precio.

    al cambiar los datos de este ejemplo se llena la lista, pero me sale el siguiente error:

    Notice: Undefined index: prod in D:\EasyPHP 2.0b1\www\dulcenetnev\lista\datoscliente.php on line 10

    Productos



    Notice: Undefined index: des in D:\EasyPHP 2.0b1\www\dulcenetnev\lista\datoscliente.php on line 11

    Descripcion



    Notice: Undefined index: precio in D:\EasyPHP 2.0b1\www\dulcenetnev\lista\datoscliente.php on line 12

    Precio



    --------

    He intentado por horas solucionarlo pero no se llena los datos. tambien intento modificar el javascript pero tampoco. por favor me ayudan?

    --------
    Otra cosita y que pena molestar: como hago para que estos campos mas unos nuevos se inserten de nuevo a otra tabla llamada pedidos y que sume el total de precios de cada productos seleccionados en el pedido?

    Muchas Gracias,
  9. avatar ccruz 2007-02-19 10:44:34 36 Ya no es necesario que me contestes!!! ya me salio, en realdad el arhivo javascript no se actualizaba tan rapido en mi servidor!! lo deje de modificar y listo!! quedó!! GRACIAS!
  10. avatar ccruz 2007-02-19 00:03:45 35 hola revisé y descargué este interesante ejercicio, con una tabla de estructura semejante me salió de maravilla, pero ahoa quiero incorporarla a otra tabla dodne el campo que se muestra en la lista es numero entero (en vez de un nombre), no me muestra los datos del registro solo me llena la lista, he observado que el valor de la variable //$nom=$_POST['num_plan'];que se observa en el archivo datoscliente.php no me trae ni un valor, a que se debera? te agradecería me indicaraS donde esta el error, ya que lo he revisado muchas veces y no encuentro donde.

Dejar un comentario


Navegación

Categorias

Archivos

Monitored by eXternalTest