PHP SQL JAVASCRIPT ПОИСК НЕ РАБОТАЕТ - PullRequest
0 голосов
/ 13 мая 2018

Я работаю на веб-сайте компании, где панель поиска используется для поиска в базе данных клиентов и сотрудников по названию.

У меня есть вывод кода ниже ( вывод 1 ), но он только ищет имя и фамилию, как это индивидуально, как это в выводе ( вывод 4 ) iЯ хочу, чтобы он объединился для поиска как по имени, так и по фамилии.

Я хочу сделать такой поиск ( output 3 )

У меня пока есть этот код...

index.php

<html>
 <head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>INDEX PAGE</title>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
  <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" />
 </head>
 <body>
  <div class="container all">
   <br />
   <h2 align="center">COMPANY NAME</h2><br />

   <div class="form-group">
    <div class="input-group">
     <input type="text" name="search_text" id="search_text" placeholder="Search by Customer Details" class="form-control" />
    </div>
   </div>

   <div id="result"></div>
  </body>
</html>

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

 load_data();

 function load_data(query)
 {
  $.ajax({
   url:"fetch.php",
   method:"POST",
   data:{query:query},
   success:function(data)
   {
    $('#result').html(data);
   }
  });
 }
 $('#search_text').keyup(function(){
  var search = $(this).val();
  if(search.length>=2){

  if(search != '')
  {
   load_data(search);
  }
}
  else
  {
   load_data();
  }

 });
});
</script>

и 2-й файл ..

fetch.php

<?php

$connect = mysqli_connect("localhost", "root", "root", "users_db")or die("ERROR");
$output = '';
if(isset($_POST["query"]))
{
 $search = mysqli_real_escape_string($connect, $_POST["query"]);
 $query = "
  SELECT * FROM users_users 
  WHERE firstname LIKE '%".$search."%'
  OR lastname LIKE '%".$search."%' 
  AND lastname LIKE '%".$search."%'
  OR link LIKE '%".$search."%'
 ";
}
else
{

}
$result = mysqli_query($connect, $query);
if(mysqli_num_rows($result) > 0)
{
 $output .= '
  <div class="otp">
  </div>
 ';
 while($row = mysqli_fetch_array($result))
 {
  $output .= '
   <div class="oup">
   <a href="
   '.$row["link"].'
   ">
   '.$row["firstname"].'
   '.$row["lastname"].'
   </a>
   </div>
  ';
 }
 echo $output;
}
else
{
 echo '';
}

?>

приведенный выше код имеет этот вывод... (вывод 1)

вывод 1

и после ввода имени при нажатии пробела он гаснет, как в (вывод 2)

output 2

Я хочу, чтобы поиск продолжался после ввода имени с пробелом между ..

как-то так .. в (выход 3)

output 3

Я новичок в php javascript и sql, так что постарайтесь разбить его для меня.заранее спасибо.Ребята, не могли бы вы дать мне еще несколько советов, как оптимизировать этот код?

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Попробуйте это:

ALTER TABLE users_users ADD FULLTEXT(firstname, lastname, link);

$searchTerm = '+'.str_replace(' ','+',$search).'*';
$query = "SELECT * FROM users where MATCH(`firstname`,`lastname`,`link`) AGAINST (".searchTerm." IN BOOLEAN MODE)";
0 голосов
/ 13 мая 2018

Прежде чем дать ответ, я должен сказать, что ваш код открыт для SQL-инъекций.Вы должны узнать о Подготовленные заявления , чтобы решить эту проблему безопасности.

Теперь, чтобы ответить на ваш вопрос.Для поиска как по имени, так и по фамилии вы должны разделить поисковый запрос перед поиском.Как то так:

      // --- Separate the search items
      if ( !empty($search) ){

        $searchWords = explode(' ', $search);
        $searchTerms = array();
        foreach ($searchWords as $word) {
            $word = trim($word);
            if (!empty($word)) {
                $searchTerms[] = "(firstname LIKE '%$word%' OR lastname LIKE '%$word%')";
            }
        }

      }

      // --- Search each search items
      $query = "SELECT * FROM users_users WHERE".implode(' AND ', $searchTerms);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...