Ver Mensaje Individual
  #2 (permalink)  
Antiguo 14/07/2015, 23:01
Avatar de Alexis88
Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: busqueda por botones ajax+mysql+php

Realizar una petición asíncrona (Ajax) con y sin jQuery, es muy sencillo.

Supongamos que tenemos un formulario con dos campos de texto; uno para el nombre de usuario y el otro para su clave, entonces, el usuario al pulsar el botón de envío, desencadena el evento submit en el formulario con lo cual los datos de este se enviarán a otro archivo (o al mismo) para ser procesados. Como se busca evitar la recarga de la ventana, entonces se usa Ajax, con lo cual, primero habría que cancelar dicho evento usando el método .preventDefault() y luego enviando los datos mediante Ajax.

Un ejemplo:

Código HTML:
Ver original
  1. <form id = "login" action = "procesar.php" method = "post">
  2.     Nombre de usuario: <input type = "text" name = "usuario" />
  3.     Clave de acceso: <input type = "password" name = "clave" />
  4.     <input type = "submit" />
  5. </form>

Código Javascript:
Ver original
  1. $("#login").on("submit", function(event){
  2.     event.preventDefault();
  3.  
  4.     $.ajax({
  5.         url: $(this).prop("action"),
  6.         type: $(this).prop("method"),
  7.         data: $(this).serialize() //Crea una cadena de consulta con los datos ingresados
  8.     }).done(function(response){
  9.         //Cuando se complete la petición de manera exitosa
  10.     }).fail(function(jqXHR, textStatus){
  11.         //Cuando ocurra un error durante la petición
  12.     });
  13. });

Para tu caso, tendrías que enviar el valor ingresado y el nombre del campo de la tabla en donde se buscará el dato o un valor con el cual puedas decidir mediante una estructura de decisión en qué campo de la tabla buscar el dato.

Por ejemplo:

Código HTML:
Ver original
  1. <form id = "buscador" action = "buscar.php" method = "get">
  2.     Buscar: <input type = "text" name = "buscar" />
  3.    
  4.     Por:
  5.     <div>
  6.         Nombre <input type = "radio" name = "filtro" value = "nombre" />
  7.         Apellido <input type = "radio" name = "filtro" value = "apellido" />
  8.     </div>
  9.  
  10.     <input type = "submit" />
  11. </form>
  12.  
  13. <section id = "listado"></section>

Código Javascript:
Ver original
  1. $("#buscador").on("submit", function(event){
  2.     event.preventDefault();
  3.  
  4.     $.ajax({
  5.         url: $(this).prop("action"),
  6.         type: $(this).prop("method"),
  7.         data: $(this).serialize(),
  8.         dataType: "html"
  9.     }).done(function(response){
  10.         $("#listado").html(response);
  11.     }).fail(function(jqXHR, textStatus){
  12.         console.log(textStatus);
  13.     });
  14. });

Código PHP:
Ver original
  1. <?php
  2. $conexion = mysqli_connect('servidor', 'usuario', 'contraseña', 'base de datos');
  3.  
  4. //Si no se logra conectar, se termina la ejecución del script
  5. if (!$conexion) exit(mysqli_connect_error());
  6.  
  7. $dato = mysqli_real_escape_string($conexion, strip_tags(trim($_GET['buscar'])));
  8. $campo = mysqli_real_escape_string($conexion, strip_tags(trim($_GET['filtro'])));
  9.  
  10. $consulta = "SELECT id, nombre, apellido FROM tabla WHERE $campo LIKE '%$dato%'"; //O $campo = '$dato'
  11. $resultados = mysqli_query($conexion, $consulta) or exit(mysqli_error($conexion));
  12.  
  13. if (mysqli_num_rows($resultados)){
  14. ?>
  15.     <table>
  16.         <thead>
  17.             <tr>
  18.                 <th>Nombre</th>
  19.                 <th>Apellido</th>
  20.                 <th>Opciones</th>
  21.             </tr>
  22.         </thead>
  23.         <tbody>
  24. <?php
  25.     while ($filas = mysqli_fetch_array($resultados)){
  26. ?>
  27.         <tr>
  28.             <td><?=$filas['nombre']?></td>
  29.             <td><?=$filas['apellido']?></td>
  30.             <td>
  31.                 <a href = "editar.php?id=<?=$filas['id']?>">Editar</a>
  32.                 <a href = "eliminar.php?id=<?=$filas['id']?>">Eliminar</a>
  33.             </td>
  34.         </tr>
  35. <?php
  36.     }
  37.     mysqli_free_result($resultados);
  38. ?>
  39.         </tbody>
  40.     </table>
  41. <?php
  42. }
  43. else{
  44.     echo 'No se encontraron datos en la consulta realizada';
  45. }
  46.  
  47. mysqli_close($conexion);
  48. ?>

El formulario de este ejemplo tiene un campo de texto en donde el usuario ingresará el dato a buscar y dos opciones de las cuales solo puede marcar una. Cuando se pulse el botón de envío, se enviarán mediante Ajax el dato ingresado y el valor de la opción marcada, luego, cuando se reciba una respuesta, esta será insertada en la sección que se encuentra debajo del formulario.

En el archivo PHP, realizo la conexión a la base de datos, desinfecto los datos recibidos de posible contenido malicioso (solo es una desinfección simple, puede ser más exhaustiva), elaboro la consulta y la ejecuto. Si de esta obtengo resultados, elaboro una tabla en donde los imprimo, caso contrario, un mensaje en el que le indico al usuario que no hay datos en la base de datos con la consulta realizada. Cualquiera de ambos resultados será el que se envíe al archivo anterior y que se insertará en la sección de id "listado".

Adapta este ejemplo a lo que necesitas.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand