首页 > 解决方案 > 过滤不过滤

问题描述

我正在尝试为汽车网站制作过滤器。我希望能够按外观代表的汽车颜色进行过滤。我这样做是通过 Select Distinct from external colors 来列出所有的外部颜色。

<h6 class="text-info">Select Color</h6>
          <ul class="list-group">
            <?php
                $sql="SELECT DISTINCT exterior FROM newcars ORDER BY exterior";
                $result=$conn->query($sql);
                while($row=$result->fetch_assoc()) {
            ?>
          <li class="list-group-item">
            <div class="form-check">
              <label class="form-check-label">
                <input type="checkbox" class="form-check-input product_check" name="" value="<?= $row['exterior']; ?>" id="exterior"><?= $row['exterior']; ?>
              </label>
            </div>
          </li>
        <?php
          }
        ?>
          </ul>
  <div id="test">
        <?php
          $sql = "SELECT * FROM newcars";
          $result = mysqli_query($conn, $sql);
          if (mysqli_num_rows($result) > 0) {
            while ($row = mysqli_fetch_assoc($result)) {
                echo ("<a href='newcarindex.php?id={$row['id']}'><div class='car'>");
                echo '
                      <tr>
                        <td>
                        <img src="data:image\jpeg;base64,'.base64_encode($row['photo']).'"/>
                        </td>
                      </tr>
                ';
                echo "<h2 class=car-name>";
                echo $row['name'];
                echo "</h2>";
                echo "<span class=stock>STOCK#";
                echo $row['stock'];
                echo "</span>";
                echo "<h3 class=car-msrp>";
                echo $row['msrp'];
                echo "</h3>";
                echo "</div></a>";
            }
          } else {
            echo "There are no Comments!";
          }
        ?>
    </div> 

action.php 我链接此页面以从他们选择的颜色中获取结果。但我仍然无法将其过滤到结果中。

  include 'dbh.php';

  if(isset($_POST['action'])) {
    $sql = "SELECT * FROM newcars WHERE class !=''";

    if(isset($_POST['class'])) {
      $class = implode("','", $_POST['class']);
      $sql .="AND class IN('".$class."')";
    }
    if(isset($_POST['body'])) {
      $body = implode("','", $_POST['body']);
      $sql .="AND class IN('".$body."')";
    }
    if(isset($_POST['exterior'])) {
      $exterior = implode("','", $_POST['exterior']);
      $sql .="AND class IN('".$exterior."')";
    }

    $result = $conn->query($sql);
    $output='';

    if($result->num_rows>0){
      while($row=$result->fetch_assoc()){
        $output .='<a href='newcarindex.php?id={$row['id']}'><div class='car'>
        <tr>
          <td>
          <img src="data:image\jpeg;base64,'.base64_encode($row['photo']).'"/>
          </td>
        </tr>
        <h2 class=car-name>'.$row['name'].'</h2>
        <span class=stock>STOCK#'.$row['stock'].'</span>
        <h3 class=car-msrp>'.$row['msrp'].'</h3>
        </div></a>'
      }
    } else {
      $output ="<h3>No Results</h3>";
    }
    echo $output;
  }
?>

标签: phpajaxdatabasefilter

解决方案


首先,您需要将复选框包装在 HTML 表单中,以便将数据发送到action.php文件:

<h6 class="text-info">Select Color</h6>
<form action="action.php">
    <ul class="list-group">
        <?php
            $sql = "SELECT DISTINCT exterior FROM newcars ORDER BY exterior";
            $result = $conn->query($sql);
            while($row=$result->fetch_assoc()) {
        ?>
            <li class="list-group-item">
                <div class="form-check">
                    <label class="form-check-label">
                        <input type="checkbox" class="form-check-input product_check" name="" value="<?= $row['exterior']; ?>" id="exterior"><?= $row['exterior']; ?>
                    </label>
                </div>
            </li>
        <?php
        }
        ?>
    </ul>
    <input type="submit" value="Filter" />
</form>
<div id="test">
...

然后,在action.php文件中你需要修改你的 SQL 查询。此时,当您将基本$sql变量与 fromif(isset($_POST['exterior']))条件连接时,查询如下所示:

SELECT * FROM newcars WHERE class !=''AND class IN( ...

使其无效(注意!=''和之间没有空格AND)。

然后while循环中混合了撇号和引号,这使得PHP代码无效。它应该如下所示:

while($row=$result->fetch_assoc()){
    $photo = base64_encode($row['photo']);
    $output .= "<a href='newcarindex.php?id={$row['id']}'>
        <div class='car'>
            <tr>
                <td>
                    <img src='data:image\jpeg;base64,{$photo}'/>
                </td>
            </tr>
            <h2 class='car-name'>{$row['name']}</h2>
            <span class='stock'>STOCK#{$row['stock']}</span>
            <h3 class='car-msrp'>{$row['msrp']}</h3>
        </div></a>";
}

推荐阅读