12 de mayo de 2015

Buscador PHP Jquery AJAX JSON

Para ejemplificar el uso de las tecnologias PHP-Jquery-AJAX-JSON se muestra la codificación de un buscador realizado en PHP que utiliza Jquery con su metodo $.ajax para hacer peticiones asincrónicas sobre una base de datos MySQL y que recibe un resultado especifico en formato JSON, este resultado es mostrado al usuario en un div ubicado en la pagina buscador.php.

Primero muestro el script de la tabla empleado_php
USE `ejemplo`;

DROP TABLE IF EXISTS `empleado_php`;

CREATE TABLE `empleado_php` (
  `ID` varchar(8) NOT NULL,
  `Nombre` varchar(50) DEFAULT NULL,
  `cargo` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

insert  into `empleado_php`(`ID`,`Nombre`,`cargo`) values 
('PHP001','Pablo Ernesto Tobar Mayora','Web Programmer'),
('PHP002','Pabletoreto Blogger','Blogger Manager'),
('PHP003','prueba de stored procedure en MySQL','Database Administrator'),
('PHP004','Prueba de funciones en MySQL','Database Tester');
Para evitar confusión quiero hacer notar que siempre codifico los formularios con extensión php aunque como pueden ver en el código no se utiliza mas que HTML por ende el formulario buscador puede tener extensión PHP(buscador.php) o bien extensión HTML(buscador.html)
<?php
//html lang="es-ES"
//head




BUSCADOR
//head

Buscador Asincrono ID a buscar:

Datos empleado seran mostrados aqui...
Lo importante comienza con especificar el lenguaje de nuestro formulario y la declaración de una directiva pragma en la etiqueta head del formulario a fin de codificar los caracteres que se enviaran, también es importante notar que se agrega la libreria Jquery en la etiqueta script del documento así como también un documento javascript llamado jquery,js ubicado en la carpeta javascript que realizara la petición asincronica,para terminar se utilizara una hoja de estilos llamada estilos.css ubicada en la carpeta content.

Se muestra el código de jquery.js en este se evita que se envíe el formulario a su action="process.php", en vez de eso, se toma el dato de búsqueda y se valida que no este vacío en la función validaForm(), como solo se tiene un dato solo se valida que exista (pero las validaciones en un formulario pueden ser mas complejas) para luego tomar el valor y enviarlo a process.php utilizando el método $.ajax()
$(document).ready(function() {
  $("#form_id").submit(function(e){
    e.preventDefault(); 
 preparar();
     if(validaForm()){  
    requestInfo();
 }
     else {return ; }  
  });
});

function preparar(){
  $("#submit_id").hide();
  $("#ajax_id").html("");
  $("#LoadingImage").show();
  $("#ajax_id").html("
realizando busqueda
"); } function validaForm(){ var id_val = $("input#ID_id").val().trim(); if((id_val=="") || id_val.replace(/s+/,'') == ''){ alert("Favor ingrese el ID"); $("input#ID_id").addClass("posicionamiento"); $("#ajax_id").html("
Debe especificar el nombre
"); return false; }else{ $("input#ID_id").removeClass("posicionamiento"); $("#div_id").empty(); } return true; } function requestInfo(){ var url = $("#form_id").attr('action'); var data = $("#form_id").serialize(); var type = $("#form_id").attr('method'); $.ajax({ url:url, data:data, type:type, cache: false, contentType: "application/x-www-form-urlencoded", dataType: 'json', encode: true, }) .done(function(data) { if(data.status != "ERROR"){ $("#infoemp tbody").html(""); $("#ajax_id").html(""); $("#submit_id").show(); $("#LoadingImage").remove(); if(data.total > 0){ $("#ajax_id").html("
" +data.total+ "
"); $("#infoemp").show(); $.each(data.info, function(i,user){ var tblRow = "" +""+user.ID+" " +""+user.Nombre+" " +""+user.cargo+" " +"" ; $(tblRow).appendTo("#infoemp tbody"); }); } else { $("#ajax_id").html("
No se encontraron resultados
"); } } else { alert("lee .......... ERROR"); $("#LoadingImage").remove(); $("#ajax_id").html(""); $("#ajax_id").html(data.error_msg).addClass("cargando"); } }) .fail(function( jqXHR, textStatus, errorThrown ) { // if ( console && console.log ) { //console.log( "La solicitud a fallado: " + errorThrown); } $("#LoadingImage").remove(); $("#ajax_id").html(""); $("#submit_id").show(); alert( "La solicitud a fallado: " + errorThrown); //} }); }
en caso no quieras serializar la información directamente del formulario sino crearla por tu cuenta e incluso agregar mas información puedes utilizar un array de la siguiente manera
 var array = new Object(); 
  array['tag'] = "login";
  array['usuario'] = $("#user").val(); 
  array['password'] = $.md5($("#pass1").val()); 
el código de process.php se encarga de conectarse a la base de datos utilizando mysqli y buscar el registro especifico
<?php
mysqli_report(MYSQLI_REPORT_STRICT);

$bd = "ejemplo";
$server ="localhost";
$user = "root";
$password = "";

if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {

 $var = array (
  "status" => "",        // "OK "| "FALSE"
  "total" => intval(0),  // total de registros encontrados
  "info" => "",          // registros encontrados
  "error_msg" => ""      // mensaje de error
     );

 if (isset($_POST['ID_name'])) {
  $valor = filter_var($_POST['ID_name'], FILTER_SANITIZE_STRING);
    
 if(empty($valor)){
  $var["status"]="ERROR";
  $var["error_msg"]="Debe especificar el ID"; 
 }

 try {

  $mysqli = mysqli_connect($server, $user, $password, $bd);
  $prepared_st = $mysqli->prepare("SELECT * FROM empleado_php WHERE ID = ?");
  $prepared_st->bind_param("s",$valor);
  $prepared_st->execute();
    
   $var["status"]="OK";
   $result = $prepared_st->get_result();  
    if($result->num_rows>0){   
     $var["total"]=$result->num_rows;
      while($obj = mysqli_fetch_assoc($result)) {
       $var["info"][] = array_map('utf8_encode', $obj);
       //$var["info"][] = $obj;
    }
   }

 else { $var['total']=0; }
  
   $result->close();
   $mysqli->close(); 

 } catch (Exception $e ) {
   $var["status"]="ERROR";
   $var["error_msg"]="message: " . $e->message;  
 }
   
header('Content-type: application/json; charset=utf-8');   
echo json_encode($var);
exit();
}
else
header('Location: http://localhost:8080/buscador/buscador.php');
}
else
header('Location: http://localhost:8080/buscador/buscador.php'); 
?>
por ultimo el código de estilos.css
label {
display:block;
margin-top:20px;
letter-spacing:1px;
}

form {
display:block;
margin:0 auto;
width:400px;
font-family:Arial;
color: #666666;
}

.posicionamiento{
    border:2px solid red;
 color:black;
 background-color:white;
 width:350px;
    font-size:16px;
}

input, textarea {
width:350px;
height:40px;
background:#666666;
border:2px solid #f6f6f6;
padding:10px;
margin-top:3px;
font-size:15px;
color:#ffffff;
}

#submit_id {
width:85px;
height:35px;
border:none;
margin-top:20px;
cursor:pointer;
}

.info, .exito, .alerta, .error { 
       text-align:center;
       width: 330px;
       font-family:Arial, Helvetica, sans-serif;  
       font-size:13px; 
       border: 1px solid; 
       margin: 0 auto; 
       padding:15px 10px 15px 50px; 
       background-repeat: no-repeat; 
       background-position: 10px center; 
} 
.info { 
       color: #00529B; 
       background-color: #BDE5F8; 
       background-image: url('imagenes/info.png'); 
} 
.exito { 
       color: #4F8A10; 
       background-color: #DFF2BF; 
       background-image:url('imagenes/exito.png'); 
} 
.alerta { 
       color: #9F6000; 
       background-color: #FEEFB3; 
       background-image: url('imagenes/alerta.png'); 
} 
.error { 
       margin:0 auto;
    width:250px;
    color: #D8000C; 
       background-color: #FFBABA; 
       background-image: url('imagenes/error_.png'); 
} 

.cargando{
margin:0 auto;
width:250px;
    color: #D8000C; 
       background-color: white; 
       background-image: url('imagenes/cargando.gif');
}
y las imágenes utilizadas

Related Posts:

  • Metodos __get() y __set() PHPEste es un ejemplo de los métodos mágicos __set() y __get() en una clase con sus respectivas validaciones utilizando el método property_exists <?php class Objeto { private $id; private $nombre; private $ema… Read More
  • Buscador PHP utilizando MySQLiAntes de empezar hago la acotación que este es un ejemplo básico pero que aun se utiliza, lo mejor seria utilizar Jquery para utilizar AJAX y recibir los mensajes vía JSON, también utilizar Jquery Validate para el campo oblig… Read More
  • Autocarga de clases __autoload() PHPCuando se escriben aplicaciones orientadas a objetos en PHP los archivos con las clases generalmente van dentro de una carpeta especifica, de esto saca ventaja la función __autoload para crear instancias de esas clases, __aut… Read More
  • Sessiones PHPPor omisión, PHP usa el gestor interno de almacenamiento files, el cual se establece mediante session.save_handler. Éste guarda los datos de sesión en el servidor en la ubicación especificada por la directiva de configuración… Read More
  • Resaltar sintaxis PHP en navegadoresA veces debes mostrar tu código php en el navegador de tu red interna para que otras personas puedan revisarlo y crear un complemento a codificar un modulo que implemente tu función, que herede de tu clase, que utilice tu int… Read More