当只有 1 个匹配项时搜索多个关键字的条形码
Search Bar coding for multiple keywords when only 1 matches
所以我浏览了互联网并实际注册了这个网站,因为我发现我的大多数 google 搜索都把我带到了这里。我几乎完成了我的网站制作,我使用了一个扩展的模板。它上面有一个无法正常工作的搜索栏。我大部分时间都在使用它。我遇到的问题是,当我输入 MySQL 的关键字时,它工作正常,当我输入一个我知道不存在的单独关键字时,它会给出正确的无结果响应。现在我的问题是,当您将两者混在一起时,数据库会出错。这是我到目前为止整理的 php 代码...
<?php
$db = mysqli_connect('host','username','password')
or die('Error connecting to MySQL server.');
$keyword = $_GET['keyword'];
$terms = explode(" ", $keyword);
$query = "SELECT * FROM searchresults WHERE ";
foreach ($terms as $each) {
$i=0;
if ($i == 0)
$query .= "pagebody LIKE '%$each%' ";
else
$query .= " OR pagebody LIKE '%$each%' ";
}
mysqli_query($db, $query) or die('Error querying database.');
$result = mysqli_query($db, $query);
$row = mysqli_fetch_array($result);
if ($row > 0) {
while ($row = mysqli_fetch_array($result)) {
$id = $row['id'];
$title = $row['title'];
$description = $row['description'];
$pagebody = $row['pagebody'];
$link = $row['link'];
echo "<h2><a href='$link'>$title</a></h2></br>
$description<br/><br/>";
}
} else
echo "No results found for.\"<b>$keyword</b>\"";
?>
如有任何帮助,我们将不胜感激。我需要弄清楚如何制作它,以便如果无法识别任何关键字,它就不会出错。
这不会解决您转义用户输入的问题,而是在解决搜索错误时回答您的问题;您的原始代码在 foreach 循环的每次迭代中保持 $i 等于 0,因此查询结果为:
SELECT * FROM searchresults WHERE pagebody LIKE '%$each%' pagebody LIKE '%$each%' pagebody LIKE '%$each%'
您需要修改以下几行:
$query = "SELECT * FROM searchresults WHERE ";
foreach ($terms as $each) {
$i=0;
if ($i == 0)
$query .= "pagebody LIKE '%$each%' ";
else
$query .= " OR pagebody LIKE '%$each%' ";
}
将其更改为:
$i=0;
$query = "SELECT * FROM searchresults WHERE";
foreach ($terms as $each) {
if($i == 0){
$query .= " pagebody LIKE '%$each%'";
}else{
$query .= " OR pagebody LIKE '%$each%'";
}
$i++;
}
所以我浏览了互联网并实际注册了这个网站,因为我发现我的大多数 google 搜索都把我带到了这里。我几乎完成了我的网站制作,我使用了一个扩展的模板。它上面有一个无法正常工作的搜索栏。我大部分时间都在使用它。我遇到的问题是,当我输入 MySQL 的关键字时,它工作正常,当我输入一个我知道不存在的单独关键字时,它会给出正确的无结果响应。现在我的问题是,当您将两者混在一起时,数据库会出错。这是我到目前为止整理的 php 代码...
<?php
$db = mysqli_connect('host','username','password')
or die('Error connecting to MySQL server.');
$keyword = $_GET['keyword'];
$terms = explode(" ", $keyword);
$query = "SELECT * FROM searchresults WHERE ";
foreach ($terms as $each) {
$i=0;
if ($i == 0)
$query .= "pagebody LIKE '%$each%' ";
else
$query .= " OR pagebody LIKE '%$each%' ";
}
mysqli_query($db, $query) or die('Error querying database.');
$result = mysqli_query($db, $query);
$row = mysqli_fetch_array($result);
if ($row > 0) {
while ($row = mysqli_fetch_array($result)) {
$id = $row['id'];
$title = $row['title'];
$description = $row['description'];
$pagebody = $row['pagebody'];
$link = $row['link'];
echo "<h2><a href='$link'>$title</a></h2></br>
$description<br/><br/>";
}
} else
echo "No results found for.\"<b>$keyword</b>\"";
?>
如有任何帮助,我们将不胜感激。我需要弄清楚如何制作它,以便如果无法识别任何关键字,它就不会出错。
这不会解决您转义用户输入的问题,而是在解决搜索错误时回答您的问题;您的原始代码在 foreach 循环的每次迭代中保持 $i 等于 0,因此查询结果为:
SELECT * FROM searchresults WHERE pagebody LIKE '%$each%' pagebody LIKE '%$each%' pagebody LIKE '%$each%'
您需要修改以下几行:
$query = "SELECT * FROM searchresults WHERE ";
foreach ($terms as $each) {
$i=0;
if ($i == 0)
$query .= "pagebody LIKE '%$each%' ";
else
$query .= " OR pagebody LIKE '%$each%' ";
}
将其更改为:
$i=0;
$query = "SELECT * FROM searchresults WHERE";
foreach ($terms as $each) {
if($i == 0){
$query .= " pagebody LIKE '%$each%'";
}else{
$query .= " OR pagebody LIKE '%$each%'";
}
$i++;
}