Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.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搜索在打开页面时显示整个db表_Php_Mysql_Search_Space - Fatal编程技术网

PHP搜索在打开页面时显示整个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

当我打开搜索页面时

(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="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中似乎不那么容易。。