Проблемы с PHP AJAX-фильтром - PullRequest
0 голосов
/ 02 октября 2019

Я пытаюсь сделать фильтр для сайта для автомобилей. Я хотел бы иметь возможность фильтровать по внешнему цвету. Я использую экстерьер для представления моего цвета в базе данных. Мой UL помещает все цвета из базы данных в поле и делает каждый из них контрольным флажком. Затем у меня есть страница со списком всех автомобилей с помощью оператора SELECT *, а затем я получаю свои результаты с помощью отдельных эхо-операторов, которые являются переносом и делением. Я не хочу отображать свое имя цвета кузова рядом с каждым автомобилем на этой странице, так как я разрабатываю мобильную версию и стараюсь поддерживать ее в чистоте. Однако я попытался перечислить их в качестве условных тегов, и я все еще получаю отправку на пустую страницу.

<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 matching results!";
          }
        ?>
    </div>

это приводит к моему сценарию ajax

<script type="text/javascript">
    $(document).ready(function(){

      $(".product_check").click(function(){
        $("#loader").show();

        var action = 'data';
        var class = get_filter_text('class');
        var body = get_filter_text('body');
        var exterior = get_filter_text('exterior');

        $.ajax({
          url:'action.php',
          method:'POST',
          data:{action:action,class:class,body:body,exterior:exterior},
          success:function(response){
          $("#test").html(response);
          $("loader").hide();
        }
        });

      });

      function get_filter_text(text_id){
        var filterData = [];
        $('#'+text_id+':checked').each(function(){
          filterData.push($(this).val());
        });
        return filterData;
      }

    });
  </script>

и, наконец, используется страница action.php для подключения к моей базе данных и фильтрации результатов

include 'dbh.php';

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

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

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

  if($result->num_rows>0){
    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>";
}
echo $output;
}
  } else {
    echo "There are no comments!";
  }
}
?>

Проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда я нажимаю на цвет, чтобы отфильтровать по моей странице, появляется пустая страница без результатов или ошибок. Что я делаю не так?

1 Ответ

0 голосов
/ 02 октября 2019

просто глядя на action.php, после успешного запроса я не вижу, чтобы $output отображался. Это полный код для action.php?

include 'dbh.php';

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

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

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

  if($result->num_rows>0){
    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>";
    }
    echo $output;
  } else {
    echo "There are no comments!";
  }
}
?>
```
...