Codeigniter Datatables при использовании фильтра не работает - PullRequest
0 голосов
/ 02 февраля 2019

Я пишу запрос к моей модели в codeigniter, это возвращает ошибку HTTP 500 при доступе через ajax, но при использовании браузера отсутствует код ошибки HTTP:

 $query = 'select album.id,
                  album.name,
                  artist.name as artist,
                  artist.name as artistid,
                  album.photo,
                  album.active,
                  album.reasonactive from ' . $this->table . 
                  ' join artist on artist.id = album.ref_artist ';
      if(isset($_POST["search"]["value"])){
         $query .= '(artist.name LIKE "%'.$_POST["search"]["value"].'%" ';
         $query .= 'OR album.name LIKE "%'.$_POST["search"]["value"].'%" ';
      }
      if(isset($_POST["order"])){
         $query .= 'ORDER BY '.$column[$_POST['order']['0']['column']].' '.$_POST['order']['0']['dir'].' ';
        }
        else
        {
         $query .= ' ORDER BY album.name asc ';
        }
        if($_POST['length'] != -1)
           $query .= 'LIMIT ' . $_POST['start'] . ', ' . $_POST['length'];
        $result = $this->db->query($query);
        return $result->result();

Это мой код ajax:

$(document).ready(function() {
  table = $('#table').DataTable({

      "processing": true, //Feature control the processing indicator.
      "serverSide": true, //Feature control DataTables' server-side processing mode.
      "order": [], //Initial no order.

      // Load data for the table's content from an Ajax source
      "ajax": {
          "url": "<?php echo base_url('Manage/get_all')?>",
          "type": "POST"
      },

      //Set column definition initialisation properties.
      "columnDefs": [
          {
              "targets": [ 0 ], //first column
              "orderable": false, //set not orderable
          },
          {
              "targets": [ -1 ], //last column
              "orderable": false, //set not orderable
          },

      ],

  });

но когда я меняю и удаляю запрос фильтра:

   $query = 'select album.id,
                        album.name,
                        artist.name as artist,
                        artist.name as artistid,
                        album.photo,
                        album.active,
                        album.reasonactive from ' . $this->table . ' join artist on artist.id = album.ref_artist ';

код работает успешно.

В моем сообщении codeigniter:

Примечание: неопределенный индекс: длина

Примечание: неопределенный индекс: начало

Примечание: неопределенный индекс: рисование

И когда я показываю $ _POST:

{"draw":null,"recordsTotal":2,"recordsFiltered":2,"data":[]}

Как мне решить эту проблему?Большое спасибо за ваше время и помощь в этом вопросе.

1 Ответ

0 голосов
/ 03 февраля 2019

В вашем запросе есть проблема, поэтому ошибка 500:

Внутри предложения if у вас отсутствует закрывающая скобка ")", в ней должно быть указано

if(isset($_POST["search"]["value"])){
   $query .= ' (artist.name LIKE "%'.$_POST["search"]["value"].'%" ';
   $query .= ' OR album.name LIKE "%'.$_POST["search"]["value"].'%" )';
}

справка по отладке:

Вы всегда можете напечатать свой последний запрос и проверить, например, с помощью phpAdmin:

echo ($this->db->last_query());die();

включить отчеты об ошибках в любой среде с заменойв вашем корневом index.php:

define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');

с этой строкой кода

define('ENVIRONMENT', 'development');

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...