高级搜索表单PHP

时间:2017-01-26 16:34:55

标签: php

我做了一个非常基本的搜索表单,从数据库中获取用户名。它有两个问题,每当我在空搜索框上按Enter键它显示整个数据库而不是显示错误消息或只是像谷歌搜索框一样。其次,我希望搜索结果首先显示在下拉列表中,然后在用户想要更多搜索结果时显示一个按钮。

请帮助我们进行这些更改。任何帮助都将受到赞赏。

    <h2>Users:</h2><br>
    <?php
    $username="";
    $output = '';
    if (isset($_POST['search'])){
    $search_query = $_POST['search'];
    $search_q = $_POST['search'];
    $search_query = preg_replace("#[^0-9a-z]#i","", $search_query);
    $search_q = preg_replace("#[^0-9a-z]#i","", $search_q);
    $query = mysql_query("SELECT * FROM users WHERE username LIKE '%$search_query%' OR last_name LIKE '%$search_query%'") or die ("Could not search");
    $count = mysql_num_rows($query);
    if($count == 0 ||) {
        $output = 'No Results Found.';
    }
    else{
    while($row = mysql_fetch_array($query)){
        $fname = $row['first_name'];
        $lname = $row['last_name'];
        $id = $row['id'];
    $output .= "<div><a href='profile.php?u=$row[username]'>$fname $lname</a></div>";
    }
    }
    }

    ?>
    <?php echo("$output");?>

      <form method="post" action="search.php" id="search">
        <input type="text" name="search" placeholder="Search..">

1 个答案:

答案 0 :(得分:0)

您应该意识到mysql_query()mysql_num_rows()mysql_fetch_array()在PHP 5.5.0中已全部弃用并在PHP 7.0.0中删除。 $_POST['search']并未过滤掉潜在的SQL注入和其他恶意代码。

无论如何,在检查数据库之前,您应该检查搜索字符串是否为空:

if (empty($POST['search'])) {
 // do nothing or give error response
}

如果您想限制为10个结果:

"SELECT * FROM users WHERE username LIKE '%$search_query%' OR last_name LIKE '%$search_query%' LIMIT 10"