llenar inputs dependiente del dato de otro input

Iniciado por matrixre9, 7 Diciembre 2013, 20:07 PM

0 Miembros y 1 Visitante están viendo este tema.

matrixre9

Buenas tardes soy nuevo en el foro y espero no cometer errores al publicar esto..

tengo un problema en una pagina web que estoy realizando

lo que quiero es lo siguiente:

tengo 3 campos de texto(en la pagina)

nombre
dirección
teléfono

tengo una tabla clientes(base de datos) con los siguientes campos:

id_cliente
dirección
tel

quiero que cuando yo escriba en el campo de texto NOMBRE y una vez lleno cuando se quite el foco(evento onblur) se realice una consulta y con los resultados de esta si es que el cliente existe automáticamente se llenen los campos DIRECCIÓN y TELÉFONO y si no existe simplemente no haga nada los deje así tal cual para poder ser editados manualmente.

se que debo utilizar Ajax para hacerlo pero no se como hacerlo, alguien podría ayudarme.

GRACIAS.

#!drvy

La menera mas sencilla de implementarlo es usar jQuery ya que te va a simplificar mucho el código. Me aburro un poco asi que te he montado un ejemplo usando JSON.

index.html
Código (html4strict) [Seleccionar]
<!doctype html>
<html lang="es">
<head>
   <meta charset="UTF-8">
   <title>POC Ajax Cliente</title>
</head>
<body>
   <div id="cliente">
      <form action="" method="POST">
         <label for="nombre">Nombre</label>
         <input type="text" id="nombre" name="nombre" value="" placeholder="Nombre.." />
         <br />
         <label for="direccion">Dirección</label>
         <input type="text" id="direccion" name="direccion" value="" placeholder="Dirección.." />
         <br />
         <label for="telefono">Teléfono</label>
         <input type="text" id="telefono" name="telefono" value="" placeholder="Teléfono..." />
      </form>
   </div>
   <div id="estado">Esperando input.</div>
   <!-- Scripts -->
   <script type="text/javascript" src="jquery.js"></script>
   <script type="text/javascript" src="cliente.js"></script>
</body>
</html>


cliente.js
Código (javascript) [Seleccionar]
$(function(){
   /* Ponemos evento blur a la escucha sobre id nombre en id cliente. */
   $('#cliente').on('blur','#nombre',function(){
      /* Obtenemos el valor del campo */
      var valor = this.value;
      /* Si la longitud del valor es mayor a 2 caracteres.. */
      if(valor.length>=3){

         /* Cambiamos el estado.. */
         $('#estado').html('Cargando datos de servidor...');

         /* Hacemos la consulta ajax */
         var consulta = $.ajax({
            type:'POST',
            url:'cliente.php',
            data:{nombre:valor},
            dataType:'JSON'
         });

         /* En caso de que se haya retornado bien.. */
         consulta.done(function(data){
            if(data.error!==undefined){
               $('#estado').html('Ha ocurrido un error: '+data.error);
               return false;
            } else {
               if(data.telefono!==undefined){$('#cliente #telefono').val(data.telefono);}
               if(data.direccion!==undefined){$('#cliente #direccion').val(data.direccion);}
               $('#estado').html('Datos cargados..');
               return true;
            }
         });

         /* Si la consulta ha fallado.. */
         consulta.fail(function(){
            $('#estado').html('Ha habido un error contactando el servidor.');
            return false;
         });

      } else {
         /* Mostrar error */
         $('#estado').html('El nombre tener una longitud mayor a 2 caracteres...');
         return false;
      }
   });
});


cliente.php
Código (php) [Seleccionar]
<?php
if(!empty($_POST['nombre'])){

   
$nombre $_POST['nombre'];

   if(
$nombre==='juan'){
      
$return = array('telefono'=>'611611611','direccion'=>'Una calle que no existe, Madrid');
   } elseif(
$nombre=='maria') {
      
$return = array('telefono'=>'666666666','direccion'=>'call del diablo, Pais de las maravillas');
   } else {
      
$return = array('error'=>'El nombre no esta guardado en la base de datos');
   }

   die(
json_encode($return));
}
?>


Obviamente la idea es cargar los datos de la BD en vez de utilizar simples IF's pero te haces una idea... es meter en un array telefono y direccion y hacer que el script muera (die) imprimiendo el array convertido en json (json_encode).

Links sobre el tema:

jQuery - http://jquery.com/
jQuery ajax - http://api.jquery.com/jQuery.ajax/
PHP json_encode  - http://www.php.net/json_encode

Saludos