php - 从 MySQL 返回相同的结果 - 我知道为什么但不知道解决方案

标签 php mysql

我想要实现的目标:我正在尝试创建一个过滤器,学生可以使用该过滤器按级别、性别或主题过滤我网站上的导师。为此,我创建了复选框,当提交为“ON”或选中时,将运行查询来查找满足该条件的导师。我使用了 while 循环来检查哪些复选框已被选中。

发生了什么:查询返回正确的结果,但假设导师教数学和英语,那么他将返回结果 div 两次。这是因为导师满足了两个查询并返回了两次。

我不知道如何解决这个问题,所以提前感谢所有帮助,下面是 HTML 和 PHP 编码的相关部分。

<form action="" method="get" >
  Name: 
    <input type="text" name="tutor_name"><br>
  Level:
    <input type="checkbox" name="check[]" value="gcse">GCSE
    <input type="checkbox" name="check[]" value="a_level">A Level<br>
  Gender:
    <input type="checkbox" name="check[]" value="male">Male
    <input type="checkbox" name="check[]" value="female">Female<br>
  Subject:
    <input type="checkbox" name="check[]" value="maths">Maths
    <input type="checkbox" name="check[]" value="science">Science
    <input type="checkbox" name="check[]" value="english">English<br>
  <input type="submit" value="Go!">

<?php

if(!empty($_GET['check'])){
  foreach($_GET['check'] as $check) {

  $check = mysql_query("SELECT `tutor_id` FROM `tutors` WHERE $check=1");

  while($row = mysql_fetch_array($check)){
    $tutor_data = tutor_data($row['tutor_id'], 'first_name','image','rating','bio','last_name');

    echo "<br><h3> " . $tutor_data['first_name'];
    echo " " . $tutor_data['last_name'];
    echo "</h3><br>" . $tutor_data['bio'];
    echo "<br>Rating: " . $tutor_data['rating']. "<br><br>";
    }
  }
    $number= mysql_num_rows($check);
      echo "<b>$number</b> results";
}

最佳答案

您应该拥有一个简单的查询,可以一次简单地检查多个值:

SELECT DISTINCT ...
WHERE 1 in (maths, english, male, a_level)

现在,您正在运行多个彼此独立的查询,因此理所当然,对于具有您正在搜索的两个或多个属性的每个导师,您都会得到一个重复的导师。如果您无法重写单个查询模型,那么您必须获取每个单独查询的结果,然后在 PHP 中将它们组合起来以过滤掉重复的内容。

另请注意,您编写的查询容易受到 SQL injection attacks 的攻击。 。在解决此问题之前,请勿在生产系统上使用该代码。

关于php - 从 MySQL 返回相同的结果 - 我知道为什么但不知道解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17955568/

相关文章:

php - 从 PHP 中的私有(private)文件夹渲染 HTML 页面

PHP MySQL 插入

mysql - 数据库连接卡在 AWS Lambda 上

php - 如何正确使用 JSON 从 php 文件中获取 MYSQL 数据库的行数?

mysql - 收集同一个表中 2 列的日期

php - 创建mysql查询以按时间间隔获取3天内的数据

php - 相似文本 - 字符串/整数比较

PHP高版本安装使用,但低版本发现漏洞

php - Web开发中的实现问题

mysql - 删除重复的行只留下最旧的行?