创建您网站的搜索引擎

时间:2015-09-16 19:45:07

标签: php mysql mysqli

我是PHP的学生和新手(我不知道)。我已经分配了一个创建网站搜索引擎的小任务。 (我根据建议编辑了我的代码)

我通过搜索谷歌和各种论坛编写了以下代码。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.W3.org/TR/xhtml/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title> Results </title>
</head>

<body>

<center>
<h1 style="color:#09F; font-size:36px;"> Search </h1>
<form action="./results.php" method="get">
<input type="text" name="input" size="50" value='<?php echo $_GET ['input'];?>' />
<input type="submit" value="search" />
</form>
</center>


<hr/>

<?php

$input = $_GET['input'];
$terms = explode(" ", $input);
$query = "SELECT * FROM search WHERE ";


$first = true;

foreach ($terms as $each) {
if ($first) {
   $query .= "keywords LIKE '%$each%' ";
   $first = false;
}
else {
   $query .= "OR keyword LIKE '%$each%' ";
}
}

//Connect to Database

mysql_connect("localhost","root","");
mysql_select_db("databasem") or die ("database not found");


$query = mysql_query($query);



$numrows = mysql_num_rows($query) or die ("Here's the error");
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 "<h2><a href='$link'>$title</a></h2>
$description<br/><br/>";

}

}

**else
echo "No result found for \"<b>$input</b>\"";**

//Disconnect 

mysql_close();

?>


</body>
</html>

将错误标记为粗体。 mysql显示查询错误。

我搜索了谷歌,我找到了PHP使用Mysqli而不是Mysql的答案。

我不知道。我发现了一些材料而且我无法理解它。

对于您(专家)来说,这似乎是一个愚蠢/无用的问题,但根据我的标准和经验,这个问题对我造成很大伤害。

---------------------------(更新代码后来点了)---------- -

更新代码后,搜索时一切正常,但最后一个else语句没有运行。当我们搜索未找到的名称时,它不显示任何结果而不是显示&#34;没有找到$ Input string&#34;的结果。

有人可以指导我吗

由于

2 个答案:

答案 0 :(得分:3)

主要问题:

1)错误变量:

$query .= "keywords LIKE '%each%' ";
                           ^---missing $

由于没有$,您正在搜索文字字符each

2)假设您的查询永远不会失败:

$query = mysql_query($query);
                            ^---no error handling

您检查连接失败和num_rows调用,但不是最重要的部分:实际查询。尝试

$query = mysql_query($query) or die(mysql_error());

3)易受sql injection attacks

影响

4)使用过时/弃用的mysql _ *()函数库。

答案 1 :(得分:1)

你的错误在foreach部分,你永远不会增加$ i,所以它保持在0。 这将使查询不正确,因为它总是选择if部分而不是else部分

您还可以在foreach中定义$ i,以便每次都创建它。它应该在外面,在循环的内部应该是$ i ++(增加$ i)

语法

$first = true;

foreach ($terms as $each) {
    if ($first) {
       $query .= "keywords LIKE '%$each%' ";
       $first = false;
    }
    else {
       $query .= "OR keyword LIKE '%$each%' ";
    }
}

在当前版本的php中不推荐使用mysql,所以你应该升级到mysqli或PDO,在那里你也可以使用预准备语句来防止sql注入。

但也许这对您的学校项目来说不是必需的