@stepahryukin

Как вывести статьи в зависимости от сочетания двух select/option используя php и mysql?

Всем привет ! Помогите пожалуйста! Нужно сделать фильтр который использует 2 select. Вот пример ссылка. загвоздка состоит в том , что данные нужно доставать с помощью 2-х select из бд. Я перерыл все, но ничего не нашел... но вот моя попытка справиться.
index.php
<!DOCTYPE html>
<html lang="en">
<head>
    <?php 
        require_once 'connect.php';
        require_once 'function.php';
    ?>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
    <body>
        <select id="flats">
            <option value="all">Выберите квартиру</option>
            <?php $filterflat = get_filterflat(); ?>
            <?php foreach ($filterflat as $post): ?>
            <option value="<?=$post["id"]?>"><?=$post["name"]?></option>
            <?php endforeach; ?>
        </select>
        <select id="station">
            <option value="all">Выберите станцию</option>
            <?php $filtermetro = get_filtermetro(); ?>
            <?php foreach ($filtermetro as $post): ?>
            <option value="<?=$post["id"]?>"><?=$post["name"]?></option>
            <?php endforeach; ?>
        </select>
        <?php $posts = get_posts(); ?>
        <?php foreach ($posts as $post): ?>
        <div id="items">
            <div class="item" data-color="<?=$post["flatid"]?>" data-shape="<?=$post["metroid"]?>">
                <div class="infoFlat">
                    <h3><?=$post["flat"]?></h3>
                    <h3><?=$post["metro"]?></h3>
                    <h3><?=$post["price"]?></h3>
                    <p class="b1"><?=$post["time"]?></p>
                </div>
                <div class="itemText">
                    <p><?=$post["texts"]?></p>
                </div>
            </div>
        </div>  
        <?php endforeach; ?>
        <script>
    var flat = document.getElementById('flats');
    var metro = document.getElementById('station');
    var items_el = document.getElementById('items');

    var filter = function() {
        var items = items_el.getElementsByClassName('item');
        for (var i = 0; i < items.length; i++) {
            if ((flat.value == 'all' || flat.value == items[i].dataset.color) &&
                (metro.value == 'all' || metro.value == items[i].dataset.shape)) {
                items[i].style.display = 'block';
            } else {
                items[i].style.display = 'none';
            }
        }
    };

    flat.addEventListener("change", filter);
    metro.addEventListener("change", filter);   
</script>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

    </body>
</html>

function.php
require_once 'connect.php';
function get_posts() { // Как и скрипт выводит все статьи сразу
        global $link;
        $sql = " SELECT * FROM order_post ORDER BY rand()";
        $result = mysqli_query($link, $sql);
        $posts = mysqli_fetch_all($result, MYSQLI_ASSOC);
        return $posts;
    }

    function get_filterflat() { // 1.select Выводит все option`ы a именно ('все','1-к квратира','2-к квратир','3-к квратир','Другое')
        global $link;
        $sql = "SELECT * FROM flats";
        var_dump($sql);
        $result = mysqli_query($link, $sql);
        $filterflat = mysqli_fetch_all($result, MYSQLI_ASSOC);
        return $filterflat;
    }

    function get_filtermetro() { // 2.select выврдит станции метро (бульвар Рокоссовского , Курская и т.д.)
        global $link;
        $sql = "SELECT * FROM station";
        $result = mysqli_query($link, $sql);
        $filtermetro = mysqli_fetch_all($result, MYSQLI_ASSOC);
        return $filtermetro;
    }

    function get_allFilters() { // Фильтрация статей по select`ам
        global $link;
        $sql = " SELECT * FROM order_post WHERE metroid = '".$_POST['station']."' AND  flatid = '".$_POST['flats']."' ";
        // var_dump($sql);
        $result = mysqli_query($link, $sql);
        $allfilters = mysqli_fetch_all($result, MYSQLI_ASSOC);
        return $allfilters;
    }
  • Вопрос задан
  • 525 просмотров
Решения вопроса 1
@granty
Вы написали только страницу показа "селектов" из БД.

1. Ваши < select id="station"> и < select id="flats"> надо вставить внутрь < form action=''> ..., сделать в ней кнопку submit и отправлять значения выбранных селектов на сервер, а он уже по ним должен выбрать статьи из БД и возвращать страницу с результатами.

Надо добавить name='' к вашим селектам, по этим именам вы будете выбирать присланные в них значения из массивов $_POST/$_GET:
< select id="station" name="station"> и < select id="flats" name="flats">

2. Второй вариант - делать запрос к серверу на ajax (передавая значения выбранных селектов) и вставлять ответ от сервера на страницу.

Поройтесь в интернете, там примеров навалом.

PS: Потом вы столкнётесь с тем, что сначала посетитель должен выбрать < select id="station" name="station">, и в зависимости от выбранной станции ему должен динамически подгрузиться список < select id="flats" name="flats"> которые расположены рядом с этой станцией (а не все имеющиеся квартиры). Иначе теряется смысл выбора станции.
Короче, продумывайте архитектуру, читайте про ajax/XMLHttpRequest (проще всего будет писать яваскрипты с помощью библиотеки jquery).
Ида, примеров реализации этого в интернете навалом.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы