Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Buscador hecho en php con peticion ajax

Estas en el tema de Buscador hecho en php con peticion ajax en el foro de PHP en Foros del Web. Hola, tengo un buscador que funciona perfectamente bien para buscar registros en la base de datos, este lo tengo hecho con html, javascript, php y ...
  #1 (permalink)  
Antiguo 08/01/2020, 16:10
 
Fecha de Ingreso: noviembre-2015
Mensajes: 70
Antigüedad: 4 años, 2 meses
Puntos: 2
Buscador hecho en php con peticion ajax

Hola, tengo un buscador que funciona perfectamente bien para buscar registros en la base de datos, este lo tengo hecho con html, javascript, php y la peticion Ajax para devolver resultados asincronos, sin embargo; al buscar un registro que no encuentra y al borrar del input los datos de busqueda, me devuelve todos los resultados que se encuentra en la base de datos. No seria ningun problema si nada mas contara con 100 o 200 registros en la base de datos, el problema viene cuando recupera 1,000,000 que no quiero de regeso porque al hacer el cambio con la peticion de ajax en el div, es evidente que se queda el nuevo div que trajo la vista del ajax. No se si me explique bien, pero en resumen, quiero que si no encuentra ninguna coincidencia o ningun resultado, simplemente se quede puesto el colspan que indica que no hay registros.
Este es mi codigo html:
Código HTML:
<section>
          <table border="0" align="center">
              <tr>
                  <td width="335"><input type="text" placeholder="Search by company name" id="bs-prod" /></td>
              </tr>
          </table>
       </section> 
A traves del input realizo la peticion que en el codigo de php se llama 'dato'
Código PHP:
include('conexion.php');

$dato $_POST['dato'];

//EJECUTAMOS LA CONSULTA DE BUSQUEDA
if ($dato == $_POST['dato']) {
  

$registro pg_query($con"SELECT cm.*, pgc.* FROM company_main cm, parent_group_catalog pgc where cm.parentgroup = pgc.groupID and cm.companyName like '%$dato%'");

//CREAMOS NUESTRA VISTA Y LA DEVOLVEMOS AL AJAX

echo '<table class="table table-striped table-condensed table-hover" id="ordCons">
            <tr>
                   <th width="50">ID</th>
                <th width="100">Company Name</th>
                <th width="150">Activity Description</th>
                <th width="150">Public or Private</th>
                <th width="150">Address</th>
                <th width="100">Parent Group</th>
                <th width="50">Is Client</th>
                <th width="50">Country</th>
                <th width="50">GRP TaxID:</th>
                <th width="50">Activities:</th>
                <th width="50">Tax ID:</th>
            </tr>'
;
if(
pg_num_rows($registro)>0){
      while(
$registro2 pg_fetch_array($registro)){
            echo 
'<tr>
                        <td>'
.$registro2['0'].'</td>
                        <td>'
.$registro2['1'].'</td>
                        <td>'
.$registro2['6'].'</td>
                        <td>'
.$registro2['8'].'</td>
                        <td>'
.$registro2['9'].'</td>
                        <td>'
.$registro2['14'].'</td>';
                        if (
$registro2['10'] == 'true') {
                          echo 
"<td>Yes</td>";
                        }else{
                          echo 
"<td>No</td>";
                        }
echo 
'                  <td>'.$registro2['5'].'</td>
                        <td>'
.$registro2['16'].'</td>
                        <td>'
.$registro2['18'].'</td>
                        <td>'
.$registro2['3'].'</td>
                        
                        
                        </tr>'
;
      }
}else{
      echo 
'<tr>
                        <td colspan="6">There is not more records</td>
                  </tr>'
;
}
}elseif(
$dato == '') {
  echo 
'<tr>
                        <td colspan="6">There is not more records</td>
                  </tr>'
;
}
echo 
'</table>'
En php le puse una condicion if, elseif que no funciona, sigue trayendo lo que no quiero
y este es mi codigo javascript de la peticion ajax
Código:
$(function() {
    
    $('#bs-prod').on('keyup', function() {
        var dato = $('#bs-prod').val();
        var url = '../php/busca_registro.php';
        $.ajax({
            type: 'POST',
            url: url,
            data: 'dato=' + dato,
            success: function(datos) {
                $('#agrega-registros').html(datos);
            }
        });
        return false;
    });
});
}
Alguien que me pueda ayudar por favor.
__________________
paco alonso
  #2 (permalink)  
Antiguo 08/01/2020, 17:48
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 9.994
Antigüedad: 11 años, 5 meses
Puntos: 2194
Respuesta: Buscador hecho en php con peticion ajax

Eso pasa porque no estás validando lo que hay en dato, supongo que si tiene solo un caracter te va a traer muchos resultados.

Código PHP:
Ver original
  1. include('conexion.php');
  2.  
  3. // Convendría realizar alguna validación o limpieza adicional
  4. // por ahora solo se quitan espacios en los extremos
  5. $dato = trim($_POST['dato']);
  6.  
  7. // Verifica que $dato no está vacío
  8. // Aunque lo más recomendable sería verificar la longitud
  9. // Algo como:  if(strlen($dato) > 2) para buscar solo si son 3 caracteres o más
  10. if($dato != '') {
  11.       // Realiza la búsqueda
  12.       $query = "SELECT cm.*, pgc.* FROM company_main cm, parent_group_catalog pgc where cm.parentgroup = pgc.groupID and cm.companyName like '%$dato%'";
  13.       // Sería bueno agregar un límite para cargar solo cierta cantidad de registros
  14.       $query .= ' LIMIT 100';
  15.  
  16.       // Ejecutas la consulta
  17.       $registro = pg_query($con, $query);
  18. }
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 08/01/2020, 17:57
 
Fecha de Ingreso: noviembre-2015
Mensajes: 70
Antigüedad: 4 años, 2 meses
Puntos: 2
Respuesta: Buscador hecho en php con peticion ajax

excelente observacion, gracias.
__________________
paco alonso



La zona horaria es GMT -6. Ahora son las 07:21.