Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
高级搜索表单PHP_Php - Fatal编程技术网

高级搜索表单PHP

高级搜索表单PHP,php,Php,我制作了一个非常基本的搜索表单,从数据库中获取用户的姓名。它有两个问题,每当我在空的搜索框中按enter键时,它会显示整个数据库,而不是显示错误消息,或者像google搜索框一样什么也不做。其次,我希望搜索结果首先显示在下拉列表中,然后是一个按钮,以便用户需要更多搜索结果时使用 请帮助进行这些更改。任何帮助都将不胜感激 <h2>Users:</h2><br> <?php $username=""; $output = ''

我制作了一个非常基本的搜索表单,从数据库中获取用户的姓名。它有两个问题,每当我在空的搜索框中按enter键时,它会显示整个数据库,而不是显示错误消息,或者像google搜索框一样什么也不做。其次,我希望搜索结果首先显示在下拉列表中,然后是一个按钮,以便用户需要更多搜索结果时使用

请帮助进行这些更改。任何帮助都将不胜感激

    <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..">
用户:

您应该知道,和在PHP5.5.0中被弃用,在PHP7.0.0中被删除。而且,
$\u 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"

. <代码>mysql*
函数在PHP5.5(在PHP7中完全删除)之后就被弃用了,如果可以的话,应该停止使用它们。您应该选择另一个允许您使用的API(在处理变量时确实应该使用),如
mysqli.*
或PDO-see。如果查询为空,就不要执行查询。在客户端,您可以在输入中添加
required
属性,在服务器端,您可以执行
if(!empty($\u POST['search']){
,检查是否有任何值要搜索。我希望前10个值以下拉形式出现,然后在其他页面上保留(如果用户愿意)。