Проблема поиска данных в реальном времени, как уведомить пользователя, чтобы быть более конкретным в поиске - PullRequest
0 голосов
/ 14 апреля 2019

Я пытаюсь использовать демонстрацию поиска в реальном времени, которую я нашел в сети, используя php, ajax и json, и хотел бы внести небольшие изменения в код, чтобы попросить пользователя быть «более конкретным» в запросе, чтобы не запрашивать всю базу данных.

Я бы хотел ограничить запрос на возврат не более чем 50 записями, и если в запросе есть больше, чтобы уведомить пользователя.

Вот источник, который я пытаюсь изменить (https://howtodecode.com/php/how-to-create-php-live-search-with-ajax-for-website/).

В приведенном ниже коде я пытался изменить json, но я не знаю, как его реализовать, поэтому я борюсь с тем, где находится ошибка в моем коде.

Я вижу следующее в ОТВЕТЕ "{" F_NAME ":" ... пожалуйста, сузьте область поиска, слишком много записей для отображения. "," L_NAME ":" "}". Кажется, это правильно, но я не могу его правильно проанализировать.

Я получаю «Данные не найдены».

    <?php
require_once('../TestSearch/Connections/Shop.php');

//fetch.php

$query = '';

if(isset($_POST["query"]))
{
 $search = str_replace(",", "|", $_POST["query"]);
 $query = "
 SELECT F_NAME, L_NAME, JOB_NO, CUST_NO, DESCRIPTIN, JOB_TYPE FROM line_job 
 WHERE F_NAME REGEXP '".$search."' 
 OR L_NAME REGEXP '".$search."' 
 OR JOB_NO REGEXP '".$search."' 
 OR CUST_NO REGEXP '".$search."' 
 OR DESCRIPTIN REGEXP '".$search."'
  OR JOB_TYPE REGEXP '".$search."'
 ";
}
else
{
 $query = "
 SELECT F_NAME, L_NAME, JOB_NO, CUST_NO, DESCRIPTIN, JOB_TYPE FROM line_job WHERE line_job = 47779
 ";
}

$result = $mysqli -> query($query);

if(mysqli_num_rows($result) > 50)
{
    $data = ['F_NAME' => '...please narrow your seach, too many records to display.','L_NAME' => ''];
    echo json_encode($data);
}else{
    while($row = mysqli_fetch_array($result))   
    {
     $data[] = $row;
    }
    echo json_encode($data);
}
?>

а вот и сценарий

<script>
$(document).ready(function(){

 load_data();

 function load_data(query)
 {
  $.ajax({
   url:"fetch.php",
   method:"POST",
   data:{query:query},
   dataType:"json",
   success:function(data)
   {
    $('#total_records').text(data.length);
    var html = '';
    if(data.length > 0)
    {
     for(var count = 0; count < data.length; count++)
     {
      html += '<tr>';
      html += '<td>'+data[count].F_NAME+'</td>';
      html += '<td>'+data[count].L_NAME+'</td>';
      html += '<td>'+data[count].JOB_NO+'</td>';
      html += '<td>'+data[count].CUST_NO+'</td>';
      html += '<td>'+data[count].DESCRIPTIN+'</td>';
      html += '<td>'+data[count].JOB_TYPE+'</td></tr>';
     }
    }
    else
    {
     html = '<tr><td colspan="5">No Data Found</td></tr>';
    }
    $('tbody').html(html);
   }
  })
 }

 $('#search').click(function(){
  var query = $('#tags').val();
  load_data(query);
 });

});
</script>

1 Ответ

0 голосов
/ 14 апреля 2019

Мне удалось решить мою проблему, слегка перекодировав php и ограничив результат запроса до 50.

<?php
require_once('../TestSearch/Connections/Shop.php');

//fetch.php

$query = '';

if(isset($_POST["query"]) and !empty($_POST["query"]))
{
 $search = str_replace(",", "|", $_POST["query"]);
 $query = "
 SELECT F_NAME, L_NAME, JOB_NO, CUST_NO, DESCRIPTIN, JOB_TYPE FROM line_job 
 WHERE F_NAME REGEXP '".$search."' 
 OR L_NAME REGEXP '".$search."' 
 OR JOB_NO REGEXP '".$search."' 
 OR CUST_NO REGEXP '".$search."' 
 OR DESCRIPTIN REGEXP '".$search."'
  OR JOB_TYPE REGEXP '".$search."'
 LIMIT 50
 ";
}
else
{
// if the form is submitted with no search criteria ""
$data = "";
echo json_encode($data);    
exit;
}


$result = $mysqli -> query($query);
//determine if the query returned a result or are there no records that match
$rowcount=mysqli_num_rows($result); 

if($rowcount > 0){

while($row = mysqli_fetch_array($result))   
{
 $data[] = $row;
}
echo json_encode($data);

}
else
{
$data = "";
echo json_encode($data);
}


?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...