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

#php #jquery #mysql #ajax

#php #jquery #mysql #ajax

Вопрос:

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

Если бы я использовал ‘или’ в $ 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
           ";
      }
  

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

Ответ №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('#(sORs)$#', '', $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(amp;$stmt, 'bind_param'), $ar_bindparam);
    }
$smt->execute();  

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