PHP mySQL 搜索无效

PHP mySQL search not working

<?php
     $username = "root";
     $password = "";
     $hostname = "localhost";

     $db_handle = mysql_connect($hostname, $username, $password) or die ("Could not connect to database");

     $selected= mysql_select_db("login", $db_handle);

     $output='';

     if(isset($_POST['search'])){
         $searchq = $_POST['search'];

         $query= "SELECT * FROM PHP_Item WHERE Name LIKE '%searchq%' OR Description LIKE '%serachq%'" or die ("could not search");
         $result= mysql_query($query);
         $count= mysql_num_rows($result);

         echo $count;

         if($count <1){
             $output = 'there were no search results';
         }else{
             while($row = mysql_fetch_array($query)){
                 $mName = $row['Name'];
                 $price = $row['Price'];
                 $id= $row['ItemID'];

                 $output .= '<div>'.$mName.' '.$price.'</div>';
             }
         }
     }
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><!-- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> --><!-- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> --><!-- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> --><!-- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
<html>
    <head>
        <title>Movie Search-Search for a movie</title>
    </head>
    <body>
        <form action="search.php" method="POST">
              <input type="text" name="search" placeholder="Find movies..."/>
              <input type="submit" value="Search movies"/>
        </form>

            <?php print("$output");?>
    </body>
</html>

我试图在我的网站上实现一个搜索栏,用户可以在其中输入电影的名称,它将 return 与用户搜索名称相同或相似的电影。

正在搜索的数据库有3个字段-->> ItemID, Name, Description。 我一直在 'there were no search results' 输出中得到 0 个结果。任何想法是什么问题?

您的代码存在一些问题。

首先,您省略了变量的美元符号,从技术上讲,您将搜索 "searchq" 或 "serachq" 文字字符串。 "serachq" 是一个打字错误,如下所述。

'%searchq%' OR Description LIKE '%serachq%'

根据$searchq = $_POST['search'];

另外,你在LIKE '%serachq%'

中的serachq这个词也打错了

重写:

'%$searchq%' OR Description LIKE '%$searchq%'
  • 检查错误会发现这些错误。

您的查询中的 or die ("could not search"); 没有帮助。请参阅下面关于将 or die(mysql_error()) 添加到 mysql_query() 的注释。

然后这一行:

while($row = mysql_fetch_array($query))

应该在 $result= mysql_query($query); 中引用 $result 而不是 $query

while($row = mysql_fetch_array($result))

error reporting 添加到您的文件的顶部,这将有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:错误报告只能在试运行中进行,绝不能在生产中进行。

同时将 or die(mysql_error()) 添加到 mysql_query()

您的 HTML 中还有似乎被注释掉的代码,并且已损坏;仔细检查:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><!-- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> --><!-- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> --><!-- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> --><!-- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
  • 这会破坏你的页面。

  • 只需将整个块更改为 <!DOCTYPE html>


您当前的代码对 SQL injection. Use prepared statements, or PDO with prepared statements 开放,它们更安全


条件语句选项:

这一行:if(isset($_POST['search']))也可以改成

if( 
    isset($_POST['search']) && 
    !empty($_POST['search']) 
    )

为了确保输入没有留空。

或简单地:

if( !empty($_POST['search']) )