我的搜索引擎项目结果页

时间:2016-12-30 11:09:44

标签: php mysql mariadb

 <!DOCTYPE html>
 <html>
 <head>
 <meta charset="utf-8">
<title>Search Engine Project</title>
<link rel="stylesheet" type="text/css" href="css/styles.css">
<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
</head>
<body>
<div class="container">
<form action="action.php" method="GET" class="search_form result-form"   autocomplete="off">
    <span class="result-header">Server Search</span>
    <input type="text" name="k" class="input result_input" value="<?php echo  $_GET['k'] ?>">
    <input type="submit" name="search" value="Search Web" class="search">
    </form>
    </div>


   <script src="js/bootstrap.min.js" ></script>
   <script src="js/jquery-3.1.1.min.js" ></script>
   <script src="js/javascript.js"></script>
   </body>
   </html>
   <?php 
   $q=$_GET['k'];
  if(isset($_GET['search'])){
  header("Location:https://www.google.co.in/?  gfe_rd=cr&ei=oyBmWN3FNvPx8Afe7a7IDA&gws_rd=ssl#q=$q");
  }
  if(isset($_GET['image'])){
  header("Location:https://www.google.co.in/search? site=&tbm=isch&source=hp&biw=1280&bih=670&q=$q");
  }
  if(isset($_GET['video'])){
   header("Location:https://www.google.com/search?  q=$q&biw=1280&bih=670&tbm=vid&source=lnms&sa=X&ved=0ahUKEwiJ_ruKxpvRAhVFgI8KHeVRBK4Q_AUICigD&dpr=1");
     }





  if(isset($_GET['local'])){
     mysql_connect("localhost", "root", "");
   mysql_select_db("search_query");
   $k = $_GET['k'];

if($k == "") {
echo "";
}
else {
$terms = explode(" ", $k);
$query= "SELECT * FROM search_table WHERE ";

foreach($terms as $each)
{
    $i=0;
    $i++;

    if($i==1)
    {
        $query .= "keywords LIKE '%$each%' ";
    }


    else
    {
        $query .= "OR keywords LIKE '%$each%' ";

    }

    }



  //query
   $query=mysql_query($query) or die(mysql_error());;
   $numrows= mysql_num_rows($query);
    if($numrows>0)
    {
        while($row = mysql_fetch_assoc($query))
        {
            $id= $row['id'];
            $title= $row['title'];
            $description= $row['description'];
            $keywords= $row['keywords'];
            $link= $row['link'];

            echo "<div style=''><h2><a href='$link'>$title</a></h2>
            $description</div> <hr><br/> <br/>";
        }

    }

    else
    {

        echo"No results found for \"<b>$k</b>\"";

    }


  //disconnect
   mysql_close();
   }
  }

  ?>

以上是php代码,代码在mysql数据库中搜索数据库并显示approtiate结果........

但是当我在主页中输入前面有大量空格的必需关键字并按下搜索时,它会给出一个错误类型的消息:

  

您的SQL语法有错误;检查手册   对应于您的MariaDB服务器版本,以获得正确的语法   靠近&#39;关键词LIKE&#39; %%&#39;关键词LIKE&#39; %%&#39;关键词LIKE&#39; %%&#39;   关键词LIKE&#39; %%&#39; KEYW&#39;在第1行错误&#34;

我不知道该怎么做。我搜索了解决方案,搜索了很多.....

图片

PHP错误:

enter image description here

空白区域输入:

enter image description here

3 个答案:

答案 0 :(得分:2)

由于LIKE子句中的空值,您的查询失败。

E.g。如果用户输入book cover

您现有的查询将如下所示:

SELECT *
FROM search_table
WHERE keywords LIKE '%%'
OR keywords LIKE '%%'
OR keywords LIKE '%%'
OR keywords LIKE '%%'
OR keywords LIKE '%book%'
OR keywords LIKE '%%'
OR keywords LIKE '%cover%'

要解决此问题,请先调整值$_GET['k']

$k = trim($_GET['k']);

然后,如果用户在单词之间添加多个空格,则过滤掉空白值。

$terms = explode(" ", $k);
$terms = array_filter($terms);

现在,您的查询将是

SELECT *
FROM search_table
WHERE keywords LIKE '%book%'
OR keywords LIKE '%cover%'

答案 1 :(得分:0)

您获得的错误是由于OR未包含在您的SQL查询中。因此,错误中的SQL为keywords LIKE '%%' keywords LIKE '%%' keywords LIKE '%%' keywords LIKE '%%'(无OR s)。原因是您在循环中$i=0之前设置了$i++。因此$i始终为1,并且永远不会附加包含OR的字符串。在循环外设置$i=0

答案 2 :(得分:0)

出现错误消息是因为$i=0; 循环中。把它移到外面。

还要避免使用空字符串。

以下是我发现构建WHERE子句的更好方法:

$ors = array();
foreach ...
{
    if (...)
        $ors[] = 'keywords LIKE ...'
}
$or_str = implode(' OR ', $ors);

我觉得比ORAND列表中的第一个或最后一个项目更简单而不是特殊。

与此同时,您应该考虑使用FULLTEXT而不是一堆LIKEs