具有多个复选框的数据表数据过滤(服务器端)

时间:2018-12-04 08:15:34

标签: javascript jquery datatables

我正在将DataTables与服务器端处理一起使用以显示数万行。我需要通过复选框过滤这些数据。我能够使一个复选框工作正常,但是我不知道如何添加多个复选框来一起工作。我在这里找到了similar solution,但是我的技能不允许我根据自己的需要进行修改:(这是我尝试过的。

我的index.php:

$("#sf").off("keyup");
setInterval(function(){
  $("#daftarteman").load('konten/daftarteman.php');
},500);

idsa变量最初设置为5,表示所有状态(未选中复选框),然后使用其format(d)函数发送到服务器端脚本(此部分工作正常)。这是我在服务器端脚本中修改sql查询的方法:

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>

编辑: 现在,在单击这三个复选框中的第一个之后,数据将被正确过滤(状态为0的打开故障单),但是取消选中则不会带回所有数据的初始状态。当我单击其他两个时,将过滤数据,但是当我取消选中时,将通过第一个过滤器(打开)对数据进行拟合。当我单击两个或多个复选框时,出现此错误:

  

发生SQL错误:SQLSTATE [21000]:基数违反:1241   操作数应包含1列

2 个答案:

答案 0 :(得分:0)

尝试将STATUS列名称包装在反引号中,这似乎是MySQL关键字

答案 1 :(得分:0)

好的,这是工作代码:

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)";

问题出在我从别人那里抢到的服务器端部分,并且添加了另一个逗号。现在一切正常。非常感谢您的宝贵时间。