Приветствую всех, подскажите как реализовать множественный фильтр. Имеется база данных, из которой выводятся выбранный пользователем с помощью выпадающего списка и чек-боксов , товар на страницу в блоке carts. Структура БД. ----index.php---- PHP: <?php include 'main.php'; $shiny = $result; ?> <!DOCTYPE html> <html lang="ru"> <head> <meta charset="utf-8"> <base href="/"> <title></title> <meta name="description" content=""> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> <!-- Template Basic Images Start --> <meta property="og:image" content="path/to/image.jpg"> <link rel="icon" href="img/favicon/favicon.ico"> <link rel="apple-touch-icon" sizes="180x180" href="img/favicon/apple-touch-icon-180x180.png"> <!-- Template Basic Images End --> <!-- Custom Browsers Color Start --> <meta name="theme-color" content="#322E44"> <!-- Custom Browsers Color End --> <link rel="stylesheet" href="css/main.css"> </head> <body> <form class="form"> <?php $result = mysqli_query($conn, 'SELECT DISTINCT brend FROM shiny ORDER BY brend'); ?> <select id="brend"> <option disabled selected>Все</option> <?php while( ($brend = mysqli_fetch_assoc($result)) ) { echo '<option value="'. $brend['brend'] .'">' . $brend['brend'] . '</option>'; } ?> </select> <?php $result = mysqli_query($conn, 'SELECT DISTINCT width FROM shiny ORDER BY width'); ?> <select id="width"> <option disabled selected>Все</option> <?php while( ($width = mysqli_fetch_assoc($result)) ) { echo '<option value="' . $width['width'] . '">' . $width['width'] . '</option>'; } ?> </select> <?php $result = mysqli_query($conn, 'SELECT DISTINCT height FROM shiny ORDER BY height'); ?> <select id="height"> <option disabled selected>Все</option> <?php while( ($height = mysqli_fetch_assoc($result)) ) { echo '<option value="' . $height['height'] . '">' . $height['height'] . '</option>'; } ?> </select> <?php $result = mysqli_query($conn, 'SELECT DISTINCT diametr FROM shiny ORDER BY diametr'); ?> <select id="diametr"> <option disabled selected>Все</option> <?php while( ($diametr = mysqli_fetch_assoc($result)) ) { echo '<option value="' . $diametr['diametr'] . '">' . $diametr['diametr'] . '</option>'; } ?> </select> <div class="leto"> <input class="check-box" type="checkbox" id="leto" /> <label class="check" for="leto">Летняя</label> </div> <div class="zima"> <input class="check-box" type="checkbox" id="zima" /> <label class="check" for="zima">Зимняя</label> </div> <div class="ship"> <input class="check-box" type="checkbox" id="ship" /> <label class="check" for="ship">Шипованная</label> </div> <div class="neship"> <input class="check-box" type="checkbox" id="neship" /> <label class="check" for="neship">Нешипованная</label> </div> <button type="reset" class="button-right">Сбросить</button> </form> <button class="button-left">Выбрать</button> <div class="carts" id="carts"> <!-- <?php foreach ($shiny as $item) : ?> <div class="cart"> <img src="<?=$item['image'];?>"> <p class="brend"><b><?=$item['brend'];?></b></p> <p class="name"><b><?=$item['name'];?></b></p> <p class="width"><b>Ширина: <?=$item['width'];?></span></b></p> <p class="height"><b>Высота: <?=$item['height'];?></span></b></p> <p class="diametr"><b>Диаметр: <?=$item['diametr'];?></span></b></p> <p class="season"><b>Сезон: <?=$item['season'];?></span></b></p> <p class="weight"><b>Вес: <?=$item['weight'];?> кг.</span></b></p> </div> <?php endforeach; ?> --> </div> <?php mysqli_close($conn); ?> <script src="js/jquery.min.js"></script> <script src="js/common.js"></script> </body> </html> ----main.php---- PHP: $conn = mysqli_connect('localhost', '*****', '*****', '******'); if($conn == false ) { echo 'Не удалось соединиться!'; echo mysqli_connect_error(); exit(); } $result = mysqli_query($conn, 'SELECT * FROM shiny'); for($i = 0;$i < mysqli_num_rows($result); $i++) { $shiny[] = mysqli_fetch_array($result); } return $shiny; ----common.js---- Код (Javascript): $(document).ready(function() { function filterItems() { var filter = $('.form'), items = $('.cart'); items.hide();
Для начал добавить всем селектам name. HTML: <select id="width" name="width"> Потом в main.php проверять есть ли что то в этих name и писать условие. PHP: if(isset($_POST['width'])){ // всяческие проверки что пришло; $width = //если все хорошо, передача это в переменную } // в итоге если есть что фильтровать пишем $sql="SELECT * FROM shiny WHERE width = '$width'"; //если нечего фильтровать $sql="SELECT * FROM shiny"; $result = mysqli_query($conn, $sql);
Спасибо,попробую. Вот сайт http://ves-shiny.ru но там неправильно работают чек-боксы, и схема вывода другая(ошибся немного).
кнопка выбрать должна быть в форме. Так примерно должно быть: HTML: <form method="post"> <p><select name="hero"> <option disabled>Выберите героя</option> <option value="Чебурашка">Чебурашка</option> <option value="Крокодил Гена">Крокодил Гена</option> <option value="Шапокляк">Шапокляк</option> <option value="Крыса Лариса">Крыса Лариса</option> </select></p> <p><input type="submit" value="Отправить"></p> </form>
У м У меня кнопка выбора работает просто как Код (Javascript): $('.button-left').click (function() { $('.carts').show();
А сорри, это @Artur_hopf накидал схематичный код с инъекцией. Вообще ajax запрос необязательно делать, тогда добавь input type submit , как пишет @Artur_hopf . Без нажатия на кнопку форма не отправится.
Что-то типа такого ? Код (Javascript): $.ajax({ url: 'index.php', data: filter.serialize(), type: 'POST', success: function(responseHtml){ $('.carts').html(responseHtml); --- Добавлено --- Эти селекты и чек-боксы просто как фильтр работают,не надо ни каких форм отправлять.
Ничего. PHP: if(isset($_POST['brend'])){ echo 'hello'; $brend = $br; } $sql="SELECT * FROM shiny WHERE brend = '$brend'"; $result = mysqli_query($conn, $sql);
HTML: <form> <label> <span>Производитель</span> <select id="brend"> <option disabled="" selected="">Все</option> <option value="Continental">Continental</option> <option value="Dunlop">Dunlop</option> <option value="Firestone">Firestone</option> <option value="Formula">Formula</option> <option value="GeneralTire">GeneralTire</option> <option value="Gislaved">Gislaved</option> <option value="Goform">Goform</option> <option value="Goodrich">Goodrich</option> <option value="GoodYear">GoodYear</option> <option value="Hankook">Hankook</option> <option value="Headway">Headway</option> <option value="Horizon">Horizon</option> <option value="Kama">Kama</option> <option value="Kumho">Kumho</option> <option value="Laufenn">Laufenn</option> <option value="Matador">Matador</option> <option value="Maxxis">Maxxis</option> <option value="Michelin">Michelin</option> <option value="Nitto">Nitto</option> <option value="Nokian">Nokian</option> <option value="Pirelli">Pirelli</option> <option value="Sailun">Sailun</option> <option value="Sava">Sava</option> <option value="Tigar">Tigar</option> <option value="ToyoTires">ToyoTires</option> <option value="Viatti">Viatti</option> <option value="Yokohama">Yokohama</option> </select> </label> <label> <span>Ширина</span> <select id="width"> <option disabled="" selected="">Все</option> <option value="115">115</option> <option value="125">125</option> <option value="135">135</option> <option value="145">145</option> <option value="155">155</option> <option value="165">165</option> <option value="175">175</option> <option value="185">185</option> <option value="195">195</option> <option value="205">205</option> <option value="215">215</option> <option value="225">225</option> <option value="235">235</option> <option value="245">245</option> <option value="255">255</option> <option value="265">265</option> <option value="275">275</option> <option value="285">285</option> <option value="295">295</option> <option value="305">305</option> <option value="315">315</option> <option value="325">325</option> <option value="335">335</option> <option value="345">345</option> </select> </label> <label> <span>Высота</span> <select id="height"> <option disabled="" selected="">Все</option> <option value="25">25</option> <option value="27">27</option> <option value="29">29</option> <option value="30">30</option> <option value="31">31</option> <option value="32">32</option> <option value="33">33</option> <option value="34">34</option> <option value="35">35</option> <option value="36">36</option> <option value="37">37</option> <option value="38.5">38.5</option> <option value="40">40</option> <option value="42">42</option> <option value="45">45</option> <option value="50">50</option> <option value="55">55</option> <option value="60">60</option> <option value="65">65</option> <option value="70">70</option> <option value="75">75</option> <option value="80">80</option> <option value="82">82</option> <option value="85">85</option> <option value="90">90</option> </select> </label> <label> <span>Диаметр</span> <select id="diametr"> <option disabled="" selected="">Все</option> <option value="12">12</option> <option value="12C">12C</option> <option value="13">13</option> <option value="13C">13C</option> <option value="14">14</option> <option value="14C">14C</option> <option value="15">15</option> <option value="15C">15C</option> <option value="16">16</option> <option value="16C">16C</option> <option value="17">17</option> <option value="17C">17C</option> <option value="18">18</option> <option value="18C">18C</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> </select> </label> </form> <button class="button-left" id="post" style="cursor: pointer;">Выбрать</button> <script> var form = document.querySelectorAll('form select'), post = document.getElementById('post'); formData = new FormData(); [].forEach.call(form, function(item){ item.addEventListener("input", function(){ var id = this.getAttribute("id"), val = this.value; formData.append(id, val); console.log(id); }) }); post.onclick = function(){ formAjax('test.php', formData, function(data){ console.log(data); }); } function formAjax(url, form, success) { var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"); xhr.open('POST', url); xhr.onreadystatechange = function() { if (xhr.readyState>3 && xhr.status==200) { success(xhr.responseText); } if (xhr.status==500) { console.log(xhr.responseText); } }; xhr.send(form); return xhr; } </script> test.php PHP: <?php if(count($_POST) > 0){ print_r($_POST); } ?>
ид прописали на кнопку? HTML: <button class="button-left" id="post" style="cursor: pointer;">Выбрать</button>
Да, вот только дошло.Теперь ошибки нет. --- Добавлено --- Сейчас все console.log отрабатывают, кроме чек-боксов.
PHP: $result = mysqli_query($conn, 'SELECT * FROM shiny'); for($i = 0;$i < mysqli_num_rows($result); $i++) { $shiny[] = mysqli_fetch_array($result); } if(count($_POST) > 0){ print_r($_POST); } return $shiny; А вот теперь работает. --- Добавлено --- В консоли приходит Array. --- Добавлено --- Я тупанул не туда вставил. PHP: if(count($_POST) > 0){ print_r($_POST);