在php中链接搜索

时间:2015-04-15 14:05:29

标签: php html mysql forms checkbox

我想将复选框表单中的搜索链接在一起。例如,如果我检查了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>";
}
}
?>

1 个答案:

答案 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函数