Foros del Web » Programando para Internet » Jquery »

[SOLUCIONADO] busqueda por botones ajax+mysql+php

Estas en el tema de busqueda por botones ajax+mysql+php en el foro de Jquery en Foros del Web. Buenas a todos, os seré lo más sincero posible, no tengo ni idea de Ajax más que la estructura básica y poco más y me ...
  #1 (permalink)  
Antiguo 14/07/2015, 10:03
Avatar de Jvgaas7  
Fecha de Ingreso: julio-2015
Mensajes: 40
Antigüedad: 8 años, 9 meses
Puntos: 1
Exclamación busqueda por botones ajax+mysql+php

Buenas a todos, os seré lo más sincero posible, no tengo ni idea de Ajax más que la estructura básica y poco más y me han mandado un trabajo con esto y...

La duda es la siguiente, ¿Cómo puedo realizar búsquedas por diferentes botones en la misma página sin necesidad de que se recargue?

Un ejemplo de lo que deseo es que dependiendo de el botón que pulse me busque por ese valor.

Por ejemplo en el imput pongo "garcía" pues si le doy a nombre me busque garcia por nombre, si pulso apellido por apellido... y posteriormente guardar los valores para llevarlos a otra página.


gracias comunidad!
  #2 (permalink)  
Antiguo 14/07/2015, 23:01
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
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
  #3 (permalink)  
Antiguo 15/07/2015, 01:58
Avatar de Jvgaas7  
Fecha de Ingreso: julio-2015
Mensajes: 40
Antigüedad: 8 años, 9 meses
Puntos: 1
Respuesta: busqueda por botones ajax+mysql+php

Alexis88 mejor respuesta imposible. Claro, conciso y sencillo.
Lo voy adaptando y comento. Mil gracias.
  #4 (permalink)  
Antiguo 15/07/2015, 05:08
Avatar de Jvgaas7  
Fecha de Ingreso: julio-2015
Mensajes: 40
Antigüedad: 8 años, 9 meses
Puntos: 1
Respuesta: busqueda por botones ajax+mysql+php

La verdad es que la funcionalidad es perfecta, me recuerda mucho a PHP con los isset(POST_());

Con este ejemplo lo que pretendo es que al realizar una búsqueda se me muestren los datos en la misma página (de ahí el que no redireccione a otra página). Los resultados que me muestre (múltiples coincidencias) me aparezcan para seleccionar una y posteriormente me lleve a un formulario donde los campos se rellenen automáticamente.

Esto último lo tengo pero sin pasar por los resultados de búsqueda debido a la necesidad de AJAX. Con este último ejemplo de qué manera se podría adaptar a mi deseo?

Muchas gracias.
  #5 (permalink)  
Antiguo 15/07/2015, 10:10
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: busqueda por botones ajax+mysql+php

Depende. ¿El paso al formulario que mencionas en donde cargarán los datos, generará una recarga de la ventana o los cargarás en un formulario que se encuentra en la misma página?
__________________
«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
  #6 (permalink)  
Antiguo 16/07/2015, 01:40
Avatar de Jvgaas7  
Fecha de Ingreso: julio-2015
Mensajes: 40
Antigüedad: 8 años, 9 meses
Puntos: 1
Respuesta: busqueda por botones ajax+mysql+php

A ver.

Pongo un ejemplo de lo que quiero.


Busqueda.php

Código HTML:
<input type="text" id=buscar>

<input type = "submit" name=enviarnombre > 
Busco los datos y aquí mismo me aparezca una tabla con los resultados filtrados por ese nombre.

-Se han encontrado 3 coincidencias


NOMBRE APELLIDO TELÉFONO
Mario Lopez 6965878
Mario Gonzalez 5812127
Mario Pérez 4546546


Al pulsar en uno de ellos (links) me redireccione a formulario.php, aquí, lo que tengo son imputs que se rellenan solos.
  #7 (permalink)  
Antiguo 16/07/2015, 09:24
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: busqueda por botones ajax+mysql+php

En el ejemplo que te mostré, hago lo mismo, solo que con los enlaces "Editar" y "Eliminar". Como verás, a la ruta hacia la cual redirigirán los enlaces, adhiero el identificador del registro que deseo editar o eliminar (según sea el caso), tomando la forma archivo.php?variable=valor.

Por ejemplo, en el archivo de edición (del ejemplo), recibo el valor identificador mediante $_GET['id'] y luego tengo que realizar una búsqueda en la base de datos con dicho dato para tomar los valores que correspondan con él y así los podré asignar a las cajas de texto del formulario en el cual serán editados.

Por lo que dices que deseas, esta es la manera en la cual tendrías que hacerlo.

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

Etiquetas: busqueda
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:17.