当我打开搜索页面时,
(1)它会立即显示所有结果(我的数据库中的每个条目。)
(2)当使用空输入单击搜索按钮时,它还会显示我的数据库中的每个条目。
我该如何解决这个问题?任何帮助将不胜感激。
<form action="search.php" method="get">
<input type="text" name="k" size="50" value="<?php echo $_GET['k']; ?>"/>
<input type="submit" value="search" />
</form>
<hr color="white">
<?php
$k = $_GET['k'];
$terms = explode(" ", $k);
$query = "SELECT * FROM table WHERE ";
foreach ($terms as $each) {
$i++;
if ($i == 1)
$query .= "keywords LIKE '%$each%' ";
else
$query .= "OR keywords LIKE '%$each%' ";
}
//connect
mysql_connect("localhost", "abc", "pass");
mysql_select_db("mydb");
$query = mysql_query($query);
$numrows = mysql_num_rows($query);
if ($numrows > 0) {
while ($row = mysql_fetch_assoc($query)) {
$id = $row['id'];
$title = $row['title'];
$link = $row['link'];
$picture = $row['picture'];
$keywords = $row['keywords'];
$date = $row['date'];
echo $row['title'];
}
}
else
echo "No results found for \"<b>$k</b>\"";
//disconnect
mysql_close();
?>
答案 0 :(得分:0)
你的问题最有可能出现在前几行:
$k = $_GET['k'];
$terms = explode(" ", $k);
$query = "SELECT * FROM table WHERE ";
foreach ($terms as $each) {
$i++;
if ($i == 1)
$query .= "keywords LIKE '%$each%' ";
else
$query .= "OR keywords LIKE '%$each%' ";
}
在运行$terms
和explode(" ", $k)
之前检查$query
数组。您必须检查以确保至少在foreach语句中$each
元素不为空。
爆炸可能会在您的查询中放入空白项目,因此您拥有:
`SELECT * FROM table WHERE keywords LIKE '%%'`
这将使任何其他OR keywords LIKE
无用。
答案 1 :(得分:0)
这里有一些强制性的样板回答:
现在问题......
您总是添加
"keywords LIKE '%%' ";
查询的子句。为什么?第一次调用页面意味着有没有 GET参数名为k。这一行:
$terms = explode(" ", $k);
返回一个长度为1的数组,其中包含一个空字符串文字...
此外,在搜索条件为空字符串的情况下,猜猜你得到了什么:相同的情况......