我正在使用带有服务器端处理的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,这意味着所有的状态(没有选中复选框)然后用它的格式(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的票证),但是取消选中“不带所有数据返回初始状态”。当我点击其他两个,数据被过滤,但当我取消选中,数据被fittfirst filter(打开)。单击两个或多个复选框时,会出现以下错误:
出现SQL错误:SQLState[21000]:基数冲突:1241操作数应包含1列
好的,下面是工作代码:
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)";
问题是服务器端的部分,我从其他人那里抓了下来,并添加了另一个逗号。现在一切正常。非常感谢你抽出时间。
尝试将status
列名包装到后引号中,这似乎是一个MySQL关键字