【问题标题】:Filter not filtering过滤不过滤
【发布时间】:2019-09-23 16:38:11
【问题描述】:

我正在尝试为汽车网站制作过滤器。我希望能够按外观代表的汽车颜色进行过滤。我这样做是通过 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;
  }
?>

【问题讨论】:

    标签: php ajax database filter


    【解决方案1】:

    首先,您需要将复选框包装在 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 变量与来自if(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>";
    }
    

    【讨论】:

      猜你喜欢
      • 2018-04-26
      • 2021-04-29
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-18
      • 2014-08-02
      • 2021-11-12
      相关资源
      最近更新 更多