【发布时间】:2021-04-22 01:38:19
【问题描述】:
所以我正在尝试使用带有 Ajax 和 PHP 的复选框来过滤记录。我正在尝试使用 PDO 过滤记录,因为它是最安全的选择。我想知道为什么过滤系统只在选择一个复选框而不是更多时过滤。
这是我的代码:
if(isset($_POST['merk']))
{
// Pretty sure you have the following format 1,2,3,4 and not '1','2','3','4'
$merk = implode(',', $_POST['merk']);
if (preg_replace('/[^A-Za-z0-9\-]/', '', $merk)) {
// Notice that placeholders should not be quoted
$sql .= ' AND merk IN(:merk)';
}
}
if(isset($_POST['brandstof']))
{
$brandstof = implode(',', $_POST['brandstof']);
if (preg_replace('/[^A-Za-z0-9\-]/', '', $brandstof)) {
$sql .= ' AND brandstof IN(:brandstof)';
}
}
if(isset($_POST['carrosserie']))
{
$carrosserie = implode(',', $_POST['carrosserie']);
if (preg_replace('/[^A-Za-z0-9\-]/', '', $carrosserie)) {
$sql .= ' AND carrosserie IN(:carrosserie)';
}
}
如果选中复选框merk,则代码将执行。查询可能有问题吗?
//We prepare our SELECT statement.
$statement = $pdo->prepare($sql);
if(isset($_POST['merk']))
{
$statement->bindParam(":merk", $merk);
// $params[] .= $merk;
}
if(isset($_POST['brandstof']))
{
$statement->bindParam(":brandstof", $brandstof);
// $params[] .= $brandstof;
}
if(isset($_POST['carrosserie']))
{
$statement->bindParam(":carrosserie", $carrosserie);
// $params[] .= $carrosserie;
}
$statement->execute();
此代码过滤一个复选框输入,但在选中两个复选框时停止过滤。请参阅下面的示例。
所以我的 POST 数据如下所示:Array ( [0] => BMW [1] => Skoda )
【问题讨论】:
-
检查 SQL 错误。你目前在盲目工作,没有错误处理。
-
@Mitya 见上面的例子
-
我在您的代码中看不到任何错误处理。您需要检查您正在构建的 SQL 查询是否有效。在这一点上,其他一切都无关紧要。
-
@Mitya 我的代码顶部有错误处理,但我没有包括在内。 ini_set('display_errors', '1'); ini_set('display_startup_errors', '1');错误报告(E_ALL);查询中没有错误。
-
这两个似乎非常错误:
$merk = implode("','", $_POST['merk']);和$merk = "'".$merk."'";。这不应该是$merk = implode(',', $_POST['merk']);,然后不要在merk中添加单引号,例如保持它来自$_POST数组,因为'data'和data不一样,我猜你正在寻找后者.
标签: jquery ajax filter pdo where-in