Ver Mensaje Individual
  #37 (permalink)  
Antiguo 02/04/2021, 20:53
Avatar de Alexis88
Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: live search php

Cita:
Iniciado por pilucho Ver Mensaje
Muchas Gracias Alexis88 ya funciona todo esta OK. te agregue puntos por la ayuda.

tengo una consulta, si quiero buscar en dos campos distintos usando uno para el nombre y otro para el email se tiene que modificar el PHP ? o hacer dos JS y PHP distintos?


Código HTML:
Ver original
  1.         <section>
  2.             <label>Buscar por nombre:</label>
  3.             <input type="search" name="buscar" autofocus />
  4.         </section>
  5.  
  6.         <section>
  7.             <label>buscar por email:</label>
  8.             <input type="search" name="buscar" autofocus />
  9.         </section>
  10.      
  11.         <section>
  12.             <label>Resultados seleccionados:</label>
  13.             <input type="text" name="nombre" readOnly />
  14.             <input type="text" name="apellido" readOnly />
  15.         </section>
  16.     </form>
Tendrías que añadir otra instancia del objeto de autocompletado y asociarlo a la caja de búsqueda por correo. En cuanto al archivo PHP, puedes hacer la búsqueda por nombre o correo en la misma consulta SQL. Y como supongo que buscas obtener los mismos resultados ya sea buscando por nombre o por correo, puedes emplear una sola función que recoja los datos de la opción seleccionada en la lista de autocompletado y los establezca en las cajas respectivas.

Por ejemplo:

Código HTML:
Ver original
  1.     <section>
  2.         <label>Buscar por nombre:</label>
  3.         <input type="search" name="byName" autofocus />
  4.     </section>
  5.  
  6.     <section>
  7.         <label>Buscar por correo:</label>
  8.         <input type="search" name="byEmail" autofocus />
  9.     </section>
  10.  
  11.     <hr />
  12.  
  13.     <section>
  14.         <label>Resultados seleccionados:</label>
  15.         <p>
  16.             <input type="text" name="nombre" readOnly />                
  17.         </p>
  18.         <p>
  19.             <input type="text" name="correo" readOnly />                
  20.         </p>
  21.     </section>
  22. </form>


Código Javascript:
Ver original
  1. let buscarNom = document.querySelector("[name=byName]"), //<input> de búsqueda por nombre
  2.     buscarCor = document.querySelector("[name=byEmail]"), //<input> de búsqueda por correo
  3.     inputNombre = document.querySelector("[name=nombre]"), //<input> en donde se mostrará el nombre
  4.     inputCorreo = document.querySelector("[name=correo]"), //<input> en donde se mostrará el correo
  5.     autoNombre = new autocomplete(), autoCorreo = new autocomplete(), //Instancias del objeto de autocompletado
  6.     rellenar = function(data){ //Función que recoge los datos seleccionados y los establece en las cajas
  7.         inputNombre.value = data.nombre;
  8.         inputCorreo.value = data.correo;
  9.     };
  10.  
  11. //Instancia del objeto para buscar por nombre
  12. autoNombre.load({
  13.     words: "buscar.php",
  14.     target: buscarNom,
  15.     value: "nombre",
  16.     async: true,
  17.     select: rellenar
  18. });
  19.  
  20. //Instancia del objeto para buscar por correo
  21. autoCorreo.load({
  22.     words: "buscar.php",
  23.     target: buscarCor,
  24.     value: "correo",
  25.     async: true,
  26.     select: rellenar
  27. });

Código PHP:
Ver original
  1. <?php
  2. $mysqli = new mysqli('server', 'user', 'password', 'database');
  3.  
  4. if ($mysqli->connect_errno) exit('No se pudo realizar la conexión: ' . $mysqli->connect_error);
  5.  
  6. //Se emplea la misma variable pues es la que utiliza el objeto de autocompletado
  7. $dato = $mysqli->real_escape_string($_GET['term']);
  8.  
  9. //Se realiza la búsqueda ya sea por nombre o correo
  10. $query = "SELECT nombre, correo FROM personas WHERE nombre LIKE '%$dato%' OR correo LIKE '%$dato%'";
  11. $results = $mysqli->query($query) or exit($mysqli->errno . ': ' . $mysqli->error);
  12. $respuesta = [];
  13.  
  14. if ($results->num_rows){
  15.     while ($rows = $results->fetch_assoc()){
  16.         $respuesta[] = [
  17.             'nombre' => $rows['nombre'], //Se devuelve el nombre
  18.             'correo' => $rows['correo'] //Y el correo
  19.         ];
  20.     }
  21. }
  22.  
  23. echo json_encode($respuesta);
  24. ?>

Aquí puedes probarlo en línea. No olvides adaptarlo a lo que tienes, borrar la caché del navegador, y mostrar aquí cualquier mensaje de error en la consola del navegador que te surja en caso de que no funcione.

__________________
«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