Как объединить поиск ajax с другим поиском ajax

У меня есть datetimepicker в ajax, который фильтрует мои данные в таблице по интервалу времени. Я хотел бы добавить текстовый фильтр, поэтому план состоит в том, чтобы фильтровать по дате и тексту одновременно.

Есть ли способ сохранить фильтр даты, когда пользователь пишет имя записи, которую он хочет увидеть?

По сути, это двойной фильтр, но я не знаю, как заставить их работать одновременно.

<script>  
  $(document).ready(function(){  
       $.datepicker.setDefaults({  
            dateFormat: 'yy-mm-dd'   
       });  
       $(function(){  
            $("#from_date").datepicker();  
            $("#to_date").datepicker();  
       });  
       $('#filter').click(function(){  
            var from_date = $('#from_date').val();  
            var to_date = $('#to_date').val();  
            if (from_date != '')  
            {  
                 $.ajax({  
                      url:"filter.php",  
                      method:"POST",  
                      data:{from_date:from_date, to_date:to_date},  
                      success:function(data)  
                      {  
                           $('#order_table').html(data);  
                      }  
                 });  
            }  
            else  
            {  
                 alert("Selecione uma data");  
            }  
       });  
  });  

filter.php

    <?php  
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $data_i = filter_input(INPUT_POST, 'from_date');
    $data_f = filter_input(INPUT_POST, 'to_date');  
} else {
    header("location:erro.php");
    exit();
}

if (empty($data_f)) {

    $data_f = date('y-m-d');
}
 
      $connect = mysqli_connect("localhost", "root", "", "layouts");  
      $output = '';  
      $query = "SELECT m.nome AS Máquina, r.cod_máquina AS ID, r.cod_posto AS Posto, r.data AS Data, r.tipo AS Tipo, r.desc_alt AS Descr, r.responsável AS Responsável FROM registos_alteração r, máquinas m WHERE r.cod_máquina = m.cod_máquina AND r.data BETWEEN '".$_POST["from_date"]."' AND '$data_f'"; 
      $result = mysqli_query($connect, $query);  
      $output .= '  
      <table align = "center">
      <thead>
      <tr>
          <font color = "black">
              <th>Máquina</th>
              <th>Nº SAP</th>
              <th>Posto</th>
              <th>Data</th>
              <th>Tipo</th>
              <th>Descrição Alteração</th>
              <th>Responsável</th>
      </tr>
      </thead>
      <tbody>
      ';  
      if (mysqli_num_rows($result) > 0)  
      {  
           while($row = mysqli_fetch_array($result))  
           {  
            $data = $row['Data'];
            $DateTime = DateTime::createFromFormat('Y-m-d', $data);
            $data_formatada = $DateTime->format('d-m-Y');
           
   
            $output .= '  
                     <tr>  
                          <td>'. $row["Máquina"] .'</td>  
                          <td>'. $row["ID"] .'</td>  
                          <td>'. $row["Posto"] .'</td>  
                          <td>'. $data_formatada .'</td>  
                          <td>'. $row["Tipo"] .'</td>  
                          <td>'. $row["Descr"] .'</td>  
                          <td>'. $row["Responsável"] .'</td> 
                     </tr>  
                ';  
           }  
      }  
      else  
      {  
    echo '<script language = "javascript">';
    echo 'alert("Não existem resultados na data especificada!");';
    echo 'window.location.reload();';
    echo '</script>';
      }  
      $output .= '</table>';  
      echo $output;  
 ?>
Предупреждение: Вы широко открыты для SQL-инъекции и должны использовать параметризованный подготовленные заявления вместо создания запросов вручную. Они предоставляются ЗОП или MySQLi. Никогда не доверяйте никаким данным! Даже если ваши запросы выполняются только доверенными пользователями, вы все еще рискуете повредить свои данные. Бежать недостаточно!
Dharman 16.03.2022 16:56
Стоит ли изучать 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 и хотите разрабатывать...
0
1
22
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы можете создать функцию (например, getFilteredData) с возвращаемыми данными, которые вы хотите отправить в ajax. Таким образом, функция фильтрует данные ajax перед запросом.

$(document).ready(function () {
    // Datepicker init
    $.datepicker.setDefaults({
        dateFormat: 'yy-mm-dd'
    });

    $("#to_date").datepicker();
    $("#from_date").datepicker();

    // Collect data
    function getFilteredData() {
        return {
            from_date: $('#from_date').val(),
            to_date: $('#to_date').val(),
            text: $('#mytextinput').val(),
            foo: $('#fooinput').val(),
            bar: $('#barinput').val(),
        }
    }

    // Ajax request on click
    $('#filter').click(function () {
        var data = getFilteredData();

        if (data.from_date != '') {
            $.ajax({
                url: "filter.php",
                method: "POST",
                data: data,
                success: function (data) {
                    $('#order_table').html(data);
                }
            });
        }
        else {
            alert("Selecione uma data");
        }
    });
});

После того, как вы можете отфильтровать Запрос БД следующим образом:

<?php
$data_text = filter_input(INPUT_POST, 'text_input');
$data_to = filter_input(INPUT_POST, 'to_date');
$data_from = filter_input(INPUT_POST, 'from_date');

// Query
$query = "SELECT m.nome AS Máquina, r.cod_máquina AS ID, r.cod_posto AS Posto, r.data AS Data, r.tipo AS Tipo, r.desc_alt AS Descr, r.responsável AS Responsável 
    FROM registos_alteração r, máquinas m 
    WHERE r.cod_máquina = m.cod_máquina ";

if ($data_to && $data_from) {
    $query .= "AND r.data BETWEEN '{$data_from}' AND '{$data_to}' ";
}

if ($data_text) {
    $query .= "AND r.title LIKE '%" . $data_text. "'% ";
}

// Get results
$result = mysqli_query($connect, $query);

Please read about SQL Injection before working with a database query: How can I prevent SQL injection in PHP?

спасибо, ваша помощь очень полезна, и я уже сделал это :)

David Martinho 16.03.2022 18:42

Рад помочь :)

ucoder92 17.03.2022 15:35

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