Фильтрация данных Datatables с несколькими флажками (на стороне сервера) - PullRequest
0 голосов
/ 04 декабря 2018

Я использую DataTables с обработкой на стороне сервера для отображения десятков тысяч строк.Мне нужно отфильтровать эти данные по флажкам.Мне удалось сделать один флажок, который работает нормально, но я не знаю, как добавить несколько флажков для совместной работы.Я нашел подобное решение здесь, но мои навыки не позволяют мне изменить его в соответствии с моими потребностями :( Вот что я пробовал ..

Мой index.php:

Statuses:<br>
<input type="checkbox" id="0" onclick="myCheckFunc()" name="statuses">Open<br>
<input type="checkbox" id="1" onclick="myCheckFunc()" name="statuses">Closed<br>
<input type="checkbox" id="2" onclick="myCheckFunc()" name="statuses">Solved<br>

<script>
var idsa = 5;
$('input[name=statuses]').click(function(){
        idsa = [];
        $('input[name=statuses]:checked').each(function() {
                idsa.push($(this).attr('id'));
        });
        idsa = idsa.join(",");
        console.log("idsa fcia: " + idsa);
        $('#example').DataTable().ajax.reload();
});
</script>

Первоначально для переменной idsa установлено значение 5, что означает, что все статусы (флажок не установлен) затем отправляются на серверный сценарий с помощью функции format (d) (эта часть работает нормально).SQL-запрос в сценарии на стороне сервера:

if ($_GET['idsa'] == 5){
         $idsa = "0,1,2"; 
} else { if (isset($_GET['idsa'])) {
         $idsa = "('" . str_replace(",", "','", $_GET['idsa']) . "')"; } 
} 
$whereAll = "STATUS IN ($idsa)";

РЕДАКТИРОВАТЬ: теперь после нажатия на первый из этих трех флажков, данные фильтруются правильно (открыть заявки со статусом 0), но снимите флажок, не возвращать исходныйсостояние со всеми данными. Когда я нажимаю на другие два, данные фильтруются, но когда я снимаю флажок, данные фильтруются первым фильтром (Открыть). Когда я нажимаю два или более флажков, я получаю эту ошибку:

Произошла ошибка SQL: SQLSTATE [21000]: Нарушение числа элементов: 1241 Операнд должен содержать 1 столбец (столбцы)

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Хорошо, вот рабочий код:

Status:<br>
  <input type="checkbox" id="0" name="statuses">Open<br>
  <input type="checkbox" id="1" name="statuses">Closed<br>
  <input type="checkbox" id="2" name="statuses">Solved<br>

<script>
var idsa = 5;
$('input[name=statuses]').click(function(){
        idsa = [];
        $('input[name=statuses]:checked').each(function() {
                idsa.push($(this).attr('id'));
        });
        idsa = idsa.join(",");
        console.log("idsa fcia: " + idsa);
        if (idsa == '') {
                idsa = 5;
        }
        $('#example').DataTable().ajax.reload();
});
</script>

И в сценарии на стороне сервера:

if ($_GET['idsa'] == 5){
        $idsa = "0,1,2";
} else {
        $idsa = $_GET['idsa'];
}
$whereAll = "STATUS IN ($idsa)";

Проблема была с серверной частью, которую я у кого-то схватилеще и там была добавлена ​​еще одна запятая.Теперь работает нормально.Большое спасибо за ваше время.

0 голосов
/ 04 декабря 2018

Попробуйте вставить имя столбца STATUS в обратные кавычки, которые, похоже, являются ключевым словом MySQL

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