我是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;的结果。
有人可以指导我吗
由于
答案 0 :(得分:3)
主要问题:
1)错误变量:
$query .= "keywords LIKE '%each%' ";
^---missing $
由于没有$
,您正在搜索文字字符e
,a
,c
,h
。
2)假设您的查询永远不会失败:
$query = mysql_query($query);
^---no error handling
您检查连接失败和num_rows调用,但不是最重要的部分:实际查询。尝试
$query = mysql_query($query) or die(mysql_error());
影响
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注入。
但也许这对您的学校项目来说不是必需的