PHP搜索框 - 正确显示搜索

时间:2015-08-12 10:21:13

标签: php mysql search

我正在为网站构建搜索功能。我不喜欢的是,如果我输入一些特殊的符号,比如<或者>或者在搜索框中的%或其他内容,即使搜索条目中没有这样的符号,它也会打印出整个数据库内容。 我该怎么办,搜索只输出包含特殊符号的条目。而不是数据库包含的所有条目。

代码:         

    mysql_connect("localhost","root","") or die(mysql_error());
    mysql_select_db("database") or die(mysql_error());;
    $output = '';

    if(isset($_POST['search'])) {
      $searchq = $_POST['search'];
      $searchq = preg_replace("#[^0-9a-z]#i","",$searchq);

      $query = mysql_query("SELECT * FROM users WHERE firstname LIKE '%$searchq%' OR lastname LIKE '%$searchq%'") or die("Could not search!");
      $count = mysql_num_rows($query);
      if ($count == 0) {
        $output = 'There was no search results!';
      } else {
        while($row = mysql_fetch_array($query)) {
            $fname = $row['firstname'];
            $lname = $row['lastname'];
            $id = $row['id'];

            $output .= '<div>'.$fname.' '.$lname.'</div>';
        }

      }
    }
    ?>
    <html>
    <head>
    <title>Search</title>
    </head>

    <body>
    <div id="top">
    <form action="search3.php" method="post">
      <input type="text" name="search" placeholder="Search here" />
      <input type="submit" value=">>" />
    </form>
    </div>
    <div id="top2">
      <?php print("$output"); ?>
    </div>
    </body>
    </html>

编辑。我试图消毒,它仍然没有像计划那样工作。

    function sanitize($data) {
      return htmlentities(strip_tags(mysql_real_escape_string($data)));
    }

    $searchq = sanitize($_POST['search']);

1 个答案:

答案 0 :(得分:1)

你容易受到sql injection的攻击。你应该使用mysqli_或pdo。例如,您可以使用mysql_real_escape_string()来避免这种情况[虽然不推荐]。

$searchq = mysql_real_escape_string($_POST['search']);

已编辑:如果您清理输入并返回空字符串(&#34;&#34;),则查询将是:

SELECT * FROM users WHERE firstname LIKE '%%' OR lastname LIKE '%%'

将始终打印出整个数据库内容。因此,请在清理后检查输入变量$searchq。如果它包含任何内容,您可以执行以下查询:

if(strlen($searchq) > 0)
{
  //run query
}
else{
   //error message
}