我想将复选框表单中的搜索链接在一起。例如,如果我检查了a和b,我有5个复选框(a,b,c,d,e),我想根据我搜索的内容进行搜索,即显示两个不同的结果。
<form role="form" action="R.php" method="post">
<div class="form-group">
<input type="checkbox" value="a" name="search" />a
<input type="checkbox" value="b" name="search" />b
<input type="checkbox" value="c" name="search" />c
<input type="checkbox" value="d" name="search" />d
<input type="checkbox" value="e" name="search" />e
</div>
<input class="btn btn-default glyphicon-align-right" type="submit" value=">>"/>
</form>
PHP
<?php $output='';
if(isset($_POST['search'])){
$searchq=$_POST['search'];
$searchq = preg_replace ("#[^0-9a-z]#i","",$searchq);
$Squery = mysql_query("SELECT * FROM database WHERE Name LIKE '%$searchq%'");
$count = mysql_num_rows ($Squery);
echo "<div id=results><ul class=list-group><div id=qwerty>";
if($count == 0){
$output = 'There was no results!';
}else{
while($row = mysql_fetch_array($Squery)){
$name = $row ['Name'];
$id = $row['ID'];
$category = $row['Category'];
$output .='<div class="container">'.$name.$category.' '.$id.'</div>';
echo "<li>"."<div style=height:95px ><h3 class=text-center style=text-transform:capitalize >".$name.' '."</h3></div>".
"<div>"."<a href=n.php><img src=images/$id.jpg alt=Image /></a>
</div>".
' '.$category.' RESULT!!!!!'.$id."</li>";
}
echo "</div></ul></div>";
}
}
?>
答案 0 :(得分:1)
如果我正确理解了这个问题,您可能希望能够搜索与您选中的复选框相匹配的所有结果。
我不确定你会想要什么样的结果,所以相反我会给你一些不同的选择,让你从那里拿走它。
首先,为了将超过一个复选框传递给PHP脚本,您需要以不同方式定义复选框。
<form role="form" action="R.php" method="post">
<div class="form-group">
<input type="checkbox" value="a" name="search[]" />a
<input type="checkbox" value="b" name="search[]" />b
<input type="checkbox" value="c" name="search[]" />c
<input type="checkbox" value="d" name="search[]" />d
<input type="checkbox" value="e" name="search[]" />e
</div>
<input class="btn btn-default glyphicon-align-right" type="submit" value=">>"/>
注意“搜索”之后的括号.. name =“search []”。这允许您的复选框传递一组值,而不是一个。
其次,在你的PHP方面。
提交复选框后,您将希望以与当前相同的方式获取它们:
$searches = $_POST['search'];
$ search现在将是一个填充了表单中检查的值的数组。
根据您想要的结果,您接下来会做的事情看起来像这样。
我们来看看A和B的检查情况。
如果你想得到所有结果,单词以字母A开头,或者单词以字母B开头:
<?php
$searches = $_POST['searches'];
$Squery = "SELECT * FROM database";
$Swhere = "";
//add all your individual searches by looping through the checkbox values
foreach($searches as $search){
$Swhere .= " OR name LIKE '%$search' ";
}
//remove the first OR case, because it is not needed for the first search query
$Swhere = ltrim($Swhere, ' OR');
//add your dynamic where statement to your query
$Squery .= $Swhere
$result = mysql_query($Squery);
//...... run the query and get the results the same way you are
通过使用foreach函数,您可以添加所需的所有复选框,但PHP端的查询根本不需要更改。
在类似的说明中,如果选择了A和B,如果你想得到所有以A开头的单词,以B开头,或者以AB开头,那么你的代码就会这样调整:
<?php
$searches = $_POST['searches'];
//this takes your array of values and combines them into one word.
//your searches variable remains an array, but your stringSearch is now
//a word with the combined values
$stringSearch = implode($searches,'');
$Squery = "SELECT * FROM database";
$Swhere = " name LIKE '%$stringSearch%' ";
//add all your individual searches by looping through the checkbox values
foreach($searches as $search){
$Swhere .= " OR name LIKE '%$search' ";
}
//add your dynamic where statement to your query
$Squery .= $Swhere
$result = mysql_query($Squery);
//...... run the query and get the results the same way you are
希望您可以采用此示例并根据您的实际需求进行调整。
有一点需要注意的是,你不应该使用mysql_query。它正在打开您的代码,以解决主要的SQL注入问题。我上面只用它来显示你如何使用当前代码。查看mysqli函数