【问题标题】:How to make a query based on multiple checkbox value如何根据多个复选框值进行查询
【发布时间】:2014-12-03 19:28:14
【问题描述】:

我想根据复选框的输入进行查询。

这是我做的:

       <form action="#" method="GET" id="filter"> 
<input type="checkbox" name="toe[]" value="ja">ja<br /> 
<input type="checkbox" name="toe[]" value="misschien">misschien<br/> 
<input type="checkbox" name="toe[]" value="nee">nee<br/>
 <input type="submit" name="kies" value="Kies" /> 
</form>


 if(isset($_GET['toe']) && count($_GET['toe'] > 0)) { 
$toeid = implode(',', $_GET['toe']);
$toeid = mysql_real_escape_string($toeid); 
}

$sql = "SELECT  * 
FROM `table` 
WHERE TOEGEZEGD = '$toeid'
ORDER BY $field $sort";

这有效,但前提是选中了 1 个复选框,否则我会得到 ja,nee 的输出,这不起作用。

我还希望(如果可能)在返回时查询中勾选的复选框将保持勾选状态。但首先是重要的,其余的都会来。

【问题讨论】:

  • 警告mysql_query 是一个过时的接口,不应在新的应用程序中使用,因为它会在未来的 PHP 版本中被删除。像PDO is not hard to learn 这样的现代替代品。如果您是 PHP 新手,PHP The Right Way 之类的指南可以帮助您解释最佳实践。
  • 感谢您的警告,但目前这对我来说不是一个选项

标签: php mysql checkbox


【解决方案1】:

你需要的是一个WHERE TOEGEZEGD IN (...) 子句,而不是你这里的。这需要单独转义所有传入参数并用逗号连接它们。

【讨论】:

  • 我可以这样查询吗? TOEGEZEGD 在哪里('$toeid')?
  • 正确转义后看起来像IN('ja','nee')
  • 好吧,我做了这样的查询: $sql = "SELECT * FROM sponsoren WHERE TOEGEZEGD IN ('$catid') 不会给出错误但也不是正确的结果,当回显$catid 它说 ja,nee 而不是 'ja','nee'。我该如何更改?ORDER BY $field $sort";
  • 您需要做的是使用array_map 来转换参数:$cat_ids = implode(",", array_map('mysql_real_escape_string', $_GET['toe'])) 值得注意的是,这在现代development framework 中完全没有问题,例如Laravel完整的数据库层。
  • 我明白我的方式(mysql,php)已经过时了,但现在我只需要让我工作,这样我们(非常小的 6 人组织)就可以使用它直到夏天。我无法阻止它并学习一种新的方式并在几周内让我开始工作。当它起作用时,我将有时间使用更现代的方式设置一个新的“版本”。感谢您的帮助
猜你喜欢
  • 2016-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-09
  • 1970-01-01
  • 1970-01-01
  • 2014-03-24
  • 2013-04-20
相关资源
最近更新 更多