php 和 mysql 中用于搜索的多个复选框?
multiple checkboxes used for search in php and mysql?
这似乎是一个常见问题,因为我已经看到很多类似的问题。
然而,没有一个答案真正指出如何从 mysql 数据库进行 selecting,这就是我目前的问题。
基本上我有一个 table,我将搜索数据存储在其中。
看起来像这样:
id blond darkHair busty curvy
---------------------------------------------------
1 blond busty
2 dark hair busty curvy
3 blond curvy
4 blond curvy
我有一个带有复选框的表单,如下所示:
<form action="search.php" method="post">
<input name="keyword[]" type="checkbox" value="blond" />
<input name="keyword[]" type="checkbox" value="dark hair" />
<input name="keyword[]" type="checkbox" value="busty" />
<input name="keyword[]" type="checkbox" value="curvy" />
</form>
和 PHP 代码如下:
if(isset($_POST['keyword']))
{
$keyword = $_POST['keyword'];
foreach ($_POST['keyword'] as $keyword) {
$keywordarray[] = mysqli_real_escape_string($conx, $keyword);
}
$keywords = implode (",", $keywordarray);
$sql = "SELECT * FROM girlsStaff
WHERE (`blond` LIKE '%".$keyword."%') OR (`darkHair` LIKE '%".$keyword."%') OR (`busty` LIKE '%".$keyword."%') OR (`thin` LIKE '%".$keyword."%')" or die();
$query = mysqli_query($conx, $sql);
现在,除了将这段代码转换为PDO或prepared statement之外,还有一个问题我不明白!
我 select 有多少个复选框并不重要...它总是 returns 来自 mysql 数据库的最后一个 checked/selected 复选框值的结果... .
有什么我遗漏的吗?
我也在我的页面顶部做了 echo $keywords
以查看发送到页面的内容,我得到了所有正确发送的 selected/checked 框的值..所以我知道问题不存在。
如有任何帮助或建议,我们将不胜感激。
我认为从 $keyword 到 $keywords 的小改动将解决您的问题:)
现在你正在寻找像 $_POST['keyword'] 数组中的最后一个值这样的项目。
这一行:
$sql = "SELECT * FROM girlsStaff WHERE (`blond` LIKE '%".$keyword."%') OR (`darkHair` LIKE '%".$keyword."%') OR (`busty` LIKE '%".$keyword."%') OR (`thin` LIKE '%".$keyword."%')" or die();
如果您有列表 aaa、bbb、ccc....,您还应该使用 IN 而不是 LIKE,但是您将在这些字段中查找具有完全相同字符串的元素。
更改为 $keywords 后,您将拥有:
... WHERE (`blond` LIKE '%".$keywords."%')
也将不起作用,因为它意味着:
... WHERE (`blond` LIKE '%aaa,bbb,ccc%')
如果你想使用 like(如果数据库中的字段只包含数组中的字符串)那么我建议在 foreach 循环中构建你的查询。示例:
$sql = "SELECT * FROM girlsStaff WHERE ".
foreach ($_POST['keyword'] as $keyword) {
$sql .= "(`blond` LIKE '%".$keyword."%') OR ";
}
//and here cut last four character " OR " part that will be unusefull
错别字:
$keywords = implode (",", $keywordarray);
^--- with an S
WHERE (`blond` LIKE '%".$keyword."%')
^--- without an S
您正在填充原始 $_POST['keyword']
数组。字符串上下文中的数组是字面词 Array
,因此您的查询实际上执行为
WHERE (`blond` LIKE '%Array%')
您需要动态构建查询。
<?php
$clause = " WHERE ";//Initial clause
$sql="SELECT * FROM `girlsStaff` ";//Query stub
if(isset($_POST['submit'])){
if(isset($_POST['keyword'])){
foreach($_POST['keyword'] as $c){
if(!empty($c)){
$sql .= $clause."`".$c."` LIKE '%{$c}%'";
$clause = " OR ";//Change to OR after 1st WHERE
}
}
}
echo $sql;//Remove after testing
}
?>
<form method="POST" action="#">
<form action="search.php" method="post">
Blond: <input name="keyword[]" type="checkbox" value="blond" />
Dark Hair: <input name="keyword[]" type="checkbox" value="dark hair" />
Busty : <input name="keyword[]" type="checkbox" value="busty" />
Curvy; <input name="keyword[]" type="checkbox" value="curvy" />
<input type="submit" name="submit" value="Submit">
</form>
示例查询
2 个复选框已填写
SELECT * FROM `girlsStaff` WHERE `dark hair` LIKE '%dark hair%' OR `curvy` LIKE '%curvy%'
4 人满
SELECT * FROM `girlsStaff` WHERE `blond` LIKE '%blond%' OR `dark hair` LIKE '%dark hair%' OR `busty` LIKE '%busty%' OR `curvy` LIKE '%curvy%'
这似乎是一个常见问题,因为我已经看到很多类似的问题。
然而,没有一个答案真正指出如何从 mysql 数据库进行 selecting,这就是我目前的问题。
基本上我有一个 table,我将搜索数据存储在其中。
看起来像这样:
id blond darkHair busty curvy
---------------------------------------------------
1 blond busty
2 dark hair busty curvy
3 blond curvy
4 blond curvy
我有一个带有复选框的表单,如下所示:
<form action="search.php" method="post">
<input name="keyword[]" type="checkbox" value="blond" />
<input name="keyword[]" type="checkbox" value="dark hair" />
<input name="keyword[]" type="checkbox" value="busty" />
<input name="keyword[]" type="checkbox" value="curvy" />
</form>
和 PHP 代码如下:
if(isset($_POST['keyword']))
{
$keyword = $_POST['keyword'];
foreach ($_POST['keyword'] as $keyword) {
$keywordarray[] = mysqli_real_escape_string($conx, $keyword);
}
$keywords = implode (",", $keywordarray);
$sql = "SELECT * FROM girlsStaff
WHERE (`blond` LIKE '%".$keyword."%') OR (`darkHair` LIKE '%".$keyword."%') OR (`busty` LIKE '%".$keyword."%') OR (`thin` LIKE '%".$keyword."%')" or die();
$query = mysqli_query($conx, $sql);
现在,除了将这段代码转换为PDO或prepared statement之外,还有一个问题我不明白!
我 select 有多少个复选框并不重要...它总是 returns 来自 mysql 数据库的最后一个 checked/selected 复选框值的结果... .
有什么我遗漏的吗?
我也在我的页面顶部做了 echo $keywords
以查看发送到页面的内容,我得到了所有正确发送的 selected/checked 框的值..所以我知道问题不存在。
如有任何帮助或建议,我们将不胜感激。
我认为从 $keyword 到 $keywords 的小改动将解决您的问题:) 现在你正在寻找像 $_POST['keyword'] 数组中的最后一个值这样的项目。
这一行:
$sql = "SELECT * FROM girlsStaff WHERE (`blond` LIKE '%".$keyword."%') OR (`darkHair` LIKE '%".$keyword."%') OR (`busty` LIKE '%".$keyword."%') OR (`thin` LIKE '%".$keyword."%')" or die();
如果您有列表 aaa、bbb、ccc....,您还应该使用 IN 而不是 LIKE,但是您将在这些字段中查找具有完全相同字符串的元素。
更改为 $keywords 后,您将拥有:
... WHERE (`blond` LIKE '%".$keywords."%')
也将不起作用,因为它意味着:
... WHERE (`blond` LIKE '%aaa,bbb,ccc%')
如果你想使用 like(如果数据库中的字段只包含数组中的字符串)那么我建议在 foreach 循环中构建你的查询。示例:
$sql = "SELECT * FROM girlsStaff WHERE ".
foreach ($_POST['keyword'] as $keyword) {
$sql .= "(`blond` LIKE '%".$keyword."%') OR ";
}
//and here cut last four character " OR " part that will be unusefull
错别字:
$keywords = implode (",", $keywordarray);
^--- with an S
WHERE (`blond` LIKE '%".$keyword."%')
^--- without an S
您正在填充原始 $_POST['keyword']
数组。字符串上下文中的数组是字面词 Array
,因此您的查询实际上执行为
WHERE (`blond` LIKE '%Array%')
您需要动态构建查询。
<?php
$clause = " WHERE ";//Initial clause
$sql="SELECT * FROM `girlsStaff` ";//Query stub
if(isset($_POST['submit'])){
if(isset($_POST['keyword'])){
foreach($_POST['keyword'] as $c){
if(!empty($c)){
$sql .= $clause."`".$c."` LIKE '%{$c}%'";
$clause = " OR ";//Change to OR after 1st WHERE
}
}
}
echo $sql;//Remove after testing
}
?>
<form method="POST" action="#">
<form action="search.php" method="post">
Blond: <input name="keyword[]" type="checkbox" value="blond" />
Dark Hair: <input name="keyword[]" type="checkbox" value="dark hair" />
Busty : <input name="keyword[]" type="checkbox" value="busty" />
Curvy; <input name="keyword[]" type="checkbox" value="curvy" />
<input type="submit" name="submit" value="Submit">
</form>
示例查询
2 个复选框已填写
SELECT * FROM `girlsStaff` WHERE `dark hair` LIKE '%dark hair%' OR `curvy` LIKE '%curvy%'
4 人满
SELECT * FROM `girlsStaff` WHERE `blond` LIKE '%blond%' OR `dark hair` LIKE '%dark hair%' OR `busty` LIKE '%busty%' OR `curvy` LIKE '%curvy%'