【问题标题】:Search Bar coding for multiple keywords when only 1 matches当只有 1 个匹配时,搜索多个关键字的条码
【发布时间】:2017-04-28 22:54:23
【问题描述】:

所以我浏览了互联网并实际注册了这个网站,因为我发现我的大多数谷歌搜索都让我在这里。我几乎完成了我的网站制作,我使用了我扩展的模板。它上面有一个无法正常工作的搜索栏。我大部分时间都在工作。我遇到的问题是,当我输入 MySQL 的关键字时它工作正常,当我输入一个我知道不存在的唯一关键字时,它会给出正确的无结果响应。现在我的问题是,当您将 2 混合在一起时,它会导致数据库出错。这是我迄今为止整理的 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>\"";
?>

任何帮助将不胜感激。我需要弄清楚如何制作它,以便如果任何关键字未被识别,它不会出错。

【问题讨论】:

  • 大声笑,是的,我在重新阅读代码时发现了这一点,谢谢,我现在正在更改它们
  • 您正在执行您的查询两次,并获取两次,这会导致您的结果从第二行开始。您描述的错误是如果存在 1 个关键字而另一个不是您想要没有结果,或者您没有返回任何结果? (还有前面提到的 SQL 注入问题(尽管删除了该评论))
  • 感谢您的回复。我对 MYSQL 很陌生,因为我在创建我的简单网站时最后离开了搜索栏,因此学习曲线很慢。我还将研究 SQL 注入部分。是否在 else 语句中从 foreach 分离中进行双重查询?我没有意识到这一点,因为当关键字起作用时我没有得到双重结果。
  • 取出mysqli_query($db, $query) or die('Error querying database.'); 并执行$result = mysqli_query($db, $query) or die('Error querying database.'); 如果它dies 你的脚本无论如何都会停止。取出$row = mysqli_fetch_array($result); 并使用行计数功能。我不确定你目前看到什么行为..实际上下面的答案似乎会解决它..或者至少是它的开始。

标签: php mysql searchbar keyword-search


【解决方案1】:

这不会解决您逃避用户输入的问题,而是回答您解决搜索错误​​的问题;您的原始代码在 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++;
}

【讨论】:

  • 感谢您的意见。当我第一次写那部分时,我实际上将 $i 变量设置为 $i++ 而不是 $i=0 但我正在阅读论坛解决错误,我看到其他地方的评论建议将其设置为 $i=0 我明天会调整它.感谢您的宝贵时间
猜你喜欢
  • 2021-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多