PHP搜索在打开页面时显示整个db表
当我打开搜索页面时 (1) 它会立即显示所有结果(my db中的每个条目) (2) 当使用空输入单击搜索按钮时,它还会显示my db中的每个条目 我如何解决这个问题?任何帮助都将不胜感激PHP搜索在打开页面时显示整个db表,php,mysql,search,space,Php,Mysql,Search,Space,当我打开搜索页面时 (1) 它会立即显示所有结果(my db中的每个条目) (2) 当使用空输入单击搜索按钮时,它还会显示my db中的每个条目 我如何解决这个问题?任何帮助都将不胜感激 <form action="search.php" method="get"> <input type="text" name="k" size="50" value="<?php echo $_GET['k']; ?>"/> <input type="submi
<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();
?>
您的问题最有可能出现在前几行:
$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%' ";
}
在分解(“,$k)
之后检查$terms
数组,并在运行$query
之前检查它。您必须检查以确保至少在foreach语句中,$each
元素不是空的
Explode可能会在查询中放入空项,因此您有:
`SELECT * FROM table WHERE keywords LIKE '%%'`
这将使任何其他或类似的关键字变得无用。一些强制性的样板回答:
您有一个安全问题。您应该始终清理输入到查询中的输入!看看
从PHP5.5开始,mysql_*已被弃用。改用
现在是问题…
你总是添加一个
"keywords LIKE '%%' ";
子句添加到查询中。为什么?页面的第一次调用意味着没有名为k的GET参数。这一行:
$terms = explode(" ", $k);
返回长度为1的数组,其中包含一个空字符串文字
另外,使用一个空字符串作为搜索条件,猜测您得到了什么:相同的情况…检查是否有任何输入-if(!empty($\u get['k'])){
很好。享受数据库pwn3d。好吧,SQL注入可能仍然适用于这里,我认为…至少单引号可以破坏您的代码…@MarcB:其中的“”上有一个拆分,所以在DB中似乎不那么容易。。