PHP AJAX - 数据表未搜索 (glitch/error)

PHP AJAX - Datatable not searching (glitch/error)

我在使用 Datatable 函数的 table 中显示数据。它使用此 php 代码正确显示数据:

<?php
     $servername = "localhost";
     $username = "root";
     $password = "";
     $database = "security_db";

     $connection = new PDO("mysql:host=$servername;dbname=$database",$username,$password);
     $connection->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

   function get_total_violations() {

     $servername = "localhost";
     $username = "root";
     $password = "";
     $database = "security_db";

     $connection = new PDO("mysql:host=$servername;dbname=$database",$username,$password);

     $statement = $connection->prepare("SELECT * FROM traffic_violations");
     $statement->execute();
     return $statement->rowCount();
   }

   $query = '';
   $output = array();

   $query = "SELECT * FROM traffic_violations";

   $statement = $connection->prepare($query);
        $statement->execute();

   $result = $statement->fetchAll();
        $data = array();

   $filtered_rows = $statement->rowCount();

   foreach($result as $row) {
        $traffic_doc = '';
        if($row["violationStatement"] != '') {
                $traffic_doc = '<img src="uploads/traffic_violations/'.$row["violationStatement"].'" class="img-thumbnail" width="50" height="35" />';
        } else {
                $traffic_doc = '';
        }

        $sub_array = array();

        $sub_array[] = $row["plateNumber"];
        $sub_array[] = $row["carModel"];
        $sub_array[] = $row["carColor"];
        $sub_array[] = $row["violationType"];
        $sub_array[] = $row["violationLocation"];
        $sub_array[] = $row["violationDateTime"];
        $sub_array[] = $traffic_doc;
        $sub_array[] = $row["cccEmployee"];
        // $sub_array[] = $row["ownerGender"];
        // $sub_array[] = $row["workingShift"];
        // $sub_array[] = $row["violationAction"];
        $sub_array[] = '<a href="javascript:void(0)" name="update" id="'.$row['id'].'">
                         <i class="fas fa-edit"></i>
                        </a>';
        $sub_array[] = '<a href="javascript:void(0)" name="delete" id="'.$row['id'].'">
                         <i class="fas fa-trash-alt"></i>
                        </a>';
        
        $data[] = $sub_array;
   }

   $output = array(
        //"draw" => intval($_POST["draw"]),
        //"recordsTotal" => $filtered_rows,
        "recordsFiltered" => get_total_violations(),
        "data" => $data
   );

   echo json_encode($output);
?>

我也用Ajax:

$(document).ready(function() {
   $("#btn_save").click(function() {
      $("#traffic_violation_form")[0].reset();
      $(".modal-title").text("Add New Violation");
      $("#traffic_action").val("Add");
      $("#traffic_operation").val("Add");
      $("#traffic_doc").html('');
   });

   var dataTable = $('.violation_data').DataTable({
      "processing": true,
      "serverSide": true,
      "ajax": {
         "url": "/traffic-fetch",
         "type": "POST",
      }
   });

   $(document).on('submit', '#traffic_violation_form', function(e){
      e.preventDefault();

      var plateNumber = $("#plate_number").val();
      var carModel = $("#car_model").val();
      var carColor = $("#car_color").val();
      var ownerGender = $("#owner_gender").val();
      var violationType = $("#violation_type").val();
      var violationLocation = $("#violation_location").val();
      var workingShift = $("#working_shift").val();
      var violationAction = $("#violation_action").val();
      var violationStatement = $("#traffic_doc").val().split('.').pop().toLowerCase();
      var cccEmployee = $("#ccc_employee").val();

      if(violationStatement != '') {
         if( JQuery.inArray(violationStatement, ['jpg', 'jpeg', 'JPG', 'JPEG', 'png', 'PNG', 'webp', 'WEBP']) == -1 ) {
            alert('Invalid file type.');
            $("#traffic_doc").val();
            return false;
         }
      } 

      if( plateNumber !='' && carModel !='' && carColor !='' && ownerGender !='' && violationType !='' && violationLocation !='' && workingShift !='' && violationAction !='' && cccEmployee !='') {
         $.ajax({
            url: "/insert-traffic",
            method: "POST",
            data: new FormData(this),
            contentType: false,
            cache: false,
            processData: false,
            success: function(data) {
               $("#traffic_violation_form")[0].reset();
               $("#trafficModal").modal('hide');
               dataTable.ajax.reload();
            }
         });
      }
      else {
         alert('Nothing should left empty!');
      }
   });
});

我遇到的问题是,当我在搜索字段中键入时,没有根据输入的搜索过滤任何数据。我尝试删除脚本,但 glitch/error 仍然存在。
应该发生什么:当在搜索中键入文本时,所有其他数据都应该隐藏并且只显示键入的关键字。
查看gif:

在脚本中我还包括这些:

<!-- Datatables -->
<script src="<?php echo $PATH?>/vendor/datatables.net/js/jquery.dataTables.min.js"></script>
<script src="<?php echo $PATH?>/vendor/datatables.net-bs4/js/dataTables.bootstrap4.min.js"></script>
<script src="<?php echo $PATH?>/vendor/datatables.net-buttons/js/dataTables.buttons.min.js"></script>
<script src="<?php echo $PATH?>/vendor/datatables.net-buttons-bs4/js/buttons.bootstrap4.min.js"></script>
<script src="<?php echo $PATH?>/vendor/datatables.net-select/js/dataTables.select.min.js"></script>

这是 HTML:

<div class="table-responsive">
          <table class="violation_data table align-items-center table-flush table-striped">
            <thead class="thead-light">
              <tr>
                <th>Plate #</th>
                <th>Vehicle Model</th>
                <th>Vehicle Color</th>
                <th>Violation</th>
                <th>Location</th>
                <th>Happened at</th>
                <th>Document</th>
                <th>CCC Employee</th>
                <th></th>
                <th></th>
              </tr>
            </thead>
            <tfoot class="thead-light">
              <tr>
                <th>Plate #</th>
                <th>Vehicle Model</th>
                <th>Vehicle Color</th>
                <th>Violation</th>
                <th>Location</th>
                <th>Happened at</th>
                <th>Document</th>
                <th>CCC Employee</th>
                <th></th>
                <th></th>
              </tr>
            </tfoot>
          </table>
        </div>

我解决了!

我只是将语法更改为以下内容:

$query .= " WHERE ";
 
if(isset($_POST["search"]["value"]))
{
 $query .= '(plateNumber LIKE "%'.$_POST["search"]["value"].'%"';
 $query .= 'OR carModel LIKE "%'.$_POST["search"]["value"].'%"';
 $query .= 'OR carColor LIKE "%'.$_POST["search"]["value"].'%" ';
 $query .= 'OR violationType LIKE "%'.$_POST["search"]["value"].'%" ';
 $query .= 'OR violationLocation LIKE "%'.$_POST["search"]["value"].'%" ';
 $query .= 'OR ownerGender LIKE "%'.$_POST["search"]["value"].'%" ';
 $query .= 'OR violationDateTime LIKE "%'.$_POST["search"]["value"].'%" ';
 $query .= 'OR cccEmployee LIKE "%'.$_POST["search"]["value"].'%")';
}

我在plateNumber之前添加了(,在cccEmployee

之后添加了)

并将 $query = " "; 更改为 $query .= " WHERE ";