Почему не работает функция поиска с функциями выбора? Использование PHP, JQuery, Ajax - PullRequest
2 голосов
/ 10 апреля 2019

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

Если я использовал 'или' в $ 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 Ответ

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

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

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

<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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...