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']) )
<?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']) )