Почему не работает функция поиска с функциями выбора? Использование PHP, jQuery, Ajax

Я хочу использовать функцию выбора и функцию поиска в Интернете. И хотите показать людям столбцы таблиц данных БД в Интернете.

Если бы я использовал «или» в $ sql, это работала бы с функцией поиска. Если бы я использовал «и» в $ sql, функция выбора работает.

Но я хочу использовать обе функции. Что не так с моими кодами? Как я могу получить обе функции?

Это коды скриптов load_data_select.php.

<script>
$(document).ready(function(){
  function load_data(query)
  {
    $.ajax({
      url:"load_data.php",
      method:"POST",
      data:{query:query},
      dataType:"text",
      success:function(data)
      {
        $('#show_product').html(data);
      }
  });
  }
  $('#search_text').keyup(function(){
    var search = $(this).val();
    if (search != '')
    {
      load_data(search);
    }
    else {
    load_data(search);
    }
  });
   $('#Category').change(function(){
        var Category = $(this).val();
        $.ajax({
             url:"load_data.php",
             method:"POST",
             data:{Category:Category},
             success:function(data)
             {
               $('#show_product').html(data);
             }
          });
     });
     $('#Obtain').change(function(){
        var Obtain = $(this).val();
        $.ajax({
             url:"load_data.php",
             method:"POST",
             data:{Obtain:Obtain},
             success:function(data)
             {
               $('#show_product').html(data);
             }
        });
     });

   });
</script>

Это load_data.php. Если изменить «или категорию» на «категорию И», затем работает функция выбора. но не работает функция поиска.

$sql = "SELECT * FROM 190406test2
 WHERE Name LIKE '%".$_POST["query"]."%'
 or Category = '".$_POST["Category"]."'
 or Obtained_From = '".$_POST["Obtain"]."'
 ";
 $result = mysqli_query($conn, $sql);
 if (isset($_POST["query"]) or
 isset($_POST["Category"]) or isset($_POST["Obtain"])
 )
 {
   if ($_POST["query"] != ''
     or $_POST["Category"] != '' or $_POST["Obtain"] != '')
      {
           $sql;
      }
      else
      {
           $sql = "SELECT * FROM 190406test2
           ";
      }

Я ожидаю вывод рабочей функции выбора и функции поиска, но фактический вывод - это только функция выбора или функция поиска.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
84
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

1) Чтобы использовать обе функции, вам нужна новая кнопка:

При использовании ajax теги формы действительно не нужны. Вы можете просто хранить свои поля ввода упакованными в div-inputscontainer следующим образом:

<div id = "inputs_container">

<input type = "text" id = "inp1"></input>
<input type = "text" id = "inp2"></input>
<input type = "text" id = "inp3"></input>
<button  id = "submit_btn">Save</button>

</div>

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

   $("#submit_btn").click(function() {

var Obj_allinputs = new Object();

$("#inputs_container input[type=text]").each(function() {
        Obj_allinputs[this.id]=this.value;
    });

$.ajax({
         url:"load_data.php",
         method:"POST",
         data:Obj_allinputs,
         success:function(data)
         {
           $('#show_product').html(data);
         }

}</script>

2) в load_data.php:

$sql='SELECT * FROM 190406test2';
if (count($_POST)>0)  $sql.=' WHERE '

//if (isset($_POST["search"])) sql. = " Name LIKE '%?%' OR ";

$ar_bindparam=array();
foreach ($_POST as $key=>$val) 
{
    $ar_bindparam[$key] = $_POST[$val];
    if ($key= = "search") sql. = " $key LIKE '%?%' OR ";
     else sql. = " $key = '?' OR ";
}
$sql = preg_replace('#(\sOR\s)$#', '', $sql);

//$result = mysqli_query($conn, $sql);  //weak regarding injection

 //$db     = new mysqli("localhost","root","","tests");
 if (  $stmt = $db->prepare($sql) )
 {  //stmt is of type mysqli_stmt
    if (count($ar_bindparam)>0)
    {
    $ar_bindparam = array_merge(array(str_repeat('s', count($ar_bindparam))), array_values($ar_bindparam));
    $ref    = new ReflectionClass('mysqli_stmt');
    $method = $ref->getMethod("bind_param");
    $method->invokeArgs($stmt,$ar_bindparam); 
      //FOR php version < 5.3 : call_user_func_array(array(&$stmt, 'bind_param'), $ar_bindparam);
    }
$smt->execute();  

  //echo $result in the right format back to your ajax call
}

Другие вопросы по теме