dongtan8979 2018-08-12 14:04
浏览 44
已采纳

PHP搜索显示的重复结果与查询完全不同

So I'm just trying to create a basic search bar to increase my php and mysql knowledge but I am seriously confused.

I have followed a tutorial and played around with the code myself but I am at a loss the search query kind of works it will display results but the results displayed are nothing like the search query it is displaying many duplicate results.

I have 2 different people with 2 different products linking to them and this is what it is showing.

enter image description here

And here is the query that I am searching.

enter image description here

and here is my code and I'm hoping someone with more knowledge might be able to help out, hoping its not just a simple mistake that I've made :O

<?php
$query = $_GET['q'];
// gets value sent over search form

$min_length = 3;
// you can set minimum length of the query if you want

if(strlen($query) >= $min_length){ // if query length is more or equal minimum length then

    $query = htmlspecialchars($query);
    // changes characters used in html to their equivalents, for example: < to &gt;

    $query = mysql_real_escape_string($query);
    // makes sure nobody uses SQL injection

    $raw_results = DB::query("SELECT  * FROM forsale, users WHERE forsale.productname LIKE '%" . $query .  "%' OR users.username LIKE '%" . $query ."%'");

    if (count($raw_results) > 0) {
      foreach($raw_results as $results) {

        echo $results['productname'];
        echo $results['username'];
        echo $results['price'];

      }
    }else{ // if there is no matching rows do following
        echo "No results";
      }
}else{ // if query length is less than minimum
  echo "Minimum length is ".$min_length;
}

?>

Thank you very much in advance.

  • 写回答

2条回答 默认 最新

  • duanjue7508 2018-08-12 14:11
    关注

    As a quick fix to check if it works, you need to link the two tables together using the user_id...

    $raw_results = DB::query("SELECT  * 
                               FROM forsale, users 
                               WHERE forsale.user_id = users.user_id
                                   and (forsale.productname LIKE '%" . $query .  "%' 
                                     OR users.username LIKE '%" . $query ."%'"));
    

    I would like to recommend moving to the newer JOIN format (https://dev.mysql.com/doc/refman/8.0/en/join.html) as well as looking into using prepared statements and bind variables.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c