Коллеги, необходимо организовать поиск по 16 пунктам, не закидывайте камнями, я учусь как и все вы.
Понимаю что запрос идет методом $_GET
в форме, также понимаю что нужно использовать AJAX
в котором полный ноль, чтобы результаты поиска показывались без перезагрузки.
Команды Mysql
понятны BETWEEN AND
и другие, по отдельности их можно прописать к каждому пункту, а вот как сделать в 1 запросе к БД их все???
Все запросы перекидываются в суперглобальный массив $_GET
,а дальше? Используется сессия?
Подскажите в какую сторону идти, архитектурно понимаю что это довольно просто, но собрать части воедино пока не хватает навыков.
Форма:
<form action="" id="search.php" method= ""GET>
<!--Марка-->
<!---->
<div class="FullMark">
<h3>Марка</h3>
<label>
<select id="full_mark" class="select2" name="mark">
<option value="0" selected>Все марки</option>
<?php if (isset($marks)): ?>
<?php foreach ($marks as $mark): ?>
<option value="<?=$mark['id']; ?>" <?= (isset($_GET['mark']) && ($_GET['mark'] == $mark['id'])) ? ' selected' : null; ?>><?=$mark['title']; ?></option>
<?php endforeach; ?>
<?php endif; ?>
</select>
</label>
</div>
<!--Модель-->
<!---->
<div class="FullModel">
<h3>Модель</h3>
<label>
<select id="full_model" class="select2" name="model">
<option value="0" disabled selected>Выберите модель</option>
</select>
</label>
</div>
<!--Город-->
<!---->
<div class="FullTown">
<h3>Город</h3>
<label>
<select name="town_sell" class="select2">
<option value="0" selected>Все города</option>
<?php if (isset($cities)): ?>
<?php foreach ($cities as $city): ?>
<option value="<?=$city['id']; ?>" <?= (isset($_GET['town_sell']) && ($_GET['town_sell'] == $city['id'])) ? ' selected' : null; ?>><?=$city['title']; ?></option>
<?php endforeach; ?>
<?php endif; ?>
</select>
</label>
</div>
<!--Стоимость-->
<!---->
<div class="FullPrice">
<h3>Цена</h3>
<label for="Price">от </label><input type="number" id="Price" name="price_from" placeholder="100.000" min="0" value="<?= (isset($_GET['price_from'])) ? $_GET['price_from'] : null; ?>">
<label for="Price2"> до </label><input type="number" id="Price2" name="price_to" placeholder="300.000" min="0" value="<?= (isset($_GET['price_to'])) ? $_GET['price_to'] : null; ?>">
</div>
<!--Количество владельцев-->
<!---->
<div class="FullOwners">
<h3>Количество владельцев</h3>
<label>
<select name="owners" class="select2">
<option value="0">Не имеет значения</option>
<option value="1" <?= (isset($_GET['owners']) && ($_GET['owners'] == 1)) ? ' selected' : null; ?>>0 владельцев/Новый</option>
<option value="2" <?= (isset($_GET['owners']) && ($_GET['owners'] == 2)) ? ' selected' : null; ?>>1</option>
<option value="3" <?= (isset($_GET['owners']) && ($_GET['owners'] == 3)) ? ' selected' : null; ?>>2</option>
<option value="4" <?= (isset($_GET['owners']) && ($_GET['owners'] == 4)) ? ' selected' : null; ?>>3</option>
<option value="5" <?= (isset($_GET['owners']) && ($_GET['owners'] == 5)) ? ' selected' : null; ?>>Более 3-х</option>
</select>
</label>
</div>
<!--Пробег-->
<!---->
<div class="FullRun">
<h3>Пробег</h3>
<label for="Run">до </label><input type="text" id="Run" name="run" maxlength="9" placeholder="5000" min="0" value="<?= (isset($_GET['run'])) ? $_GET['run'] : null; ?>"/> км.
</div>
<!--Бит или не бит-->
<!---->
<div class="FullNotBroken">
<h3>Бит/Не бит</h3>
<label>
<select name="not_broken" class="select2">
<option value="0">Не имеет значения</option>
<option value="1" <?= (isset($_GET['not_broken']) && ($_GET['not_broken'] == 1)) ? ' selected' : null; ?>>Не требует ремонта</option>
<option value="2" <?= (isset($_GET['not_broken']) && ($_GET['not_broken'] == 2)) ? ' selected' : null; ?>>Требует ремонта</option>
</select>
</label>
</div>
<!--Год выпуска-->
<!---->
<div class="FullYear">
<h3>Год выпуска</h3>
<!---->
<!--Год выпуска ОТ-->
<!---->
<label for="YearFrom">от </label>
<select id="YearFrom" name="year_from" class="select2">
<option value="0">Не имеет значения</option>
<?php for ($i = date('Y'); $i >= 1900; $i--): ?>
<option value="<?=$i; ?>" <?= (isset($_GET['year_from']) && ($_GET['year_from'] == $i)) ? ' selected' : null; ?>><?=$i; ?></option>
<?php endfor; ?>
</select>
<!--Год выпуска ДО-->
<!---->
<label for="YearTo">до </label>
<select id="YearTo" name="year_to" class="select2">
<option value="0">Не имеет значения</option>
<?php for ($i = date('Y'); $i >= 1900; $i--): ?>
<option value="<?=$i; ?>" <?= (isset($_GET['year_to']) && ($_GET['year_to'] == $i)) ? ' selected' : null; ?>><?=$i; ?></option>
<?php endfor; ?>
</select>
</div>
<!--Тип кузова-->
<!---->
<div class="FullCarBody">
<h3>Тип кузова</h3>
<label>
<select name="car_body" class="select2">
<option value="0">Не имеет значения</option>
<option value="1" <?= (isset($_GET['car_body']) && ($_GET['car_body'] == 1)) ? ' selected' : null; ?>>Седан</option>
<option value="2" <?= (isset($_GET['car_body']) && ($_GET['car_body'] == 2)) ? ' selected' : null; ?>>Хэтчбэк</option>
<option value="3" <?= (isset($_GET['car_body']) && ($_GET['car_body'] == 3)) ? ' selected' : null; ?>>Универсал</option>
<option value="4" <?= (isset($_GET['car_body']) && ($_GET['car_body'] == 4)) ? ' selected' : null; ?>>Купе</option>
<option value="5" <?= (isset($_GET['car_body']) && ($_GET['car_body'] == 5)) ? ' selected' : null; ?>>Пикап</option>
<option value="6" <?= (isset($_GET['car_body']) && ($_GET['car_body'] == 6)) ? ' selected' : null; ?>>Лифтбэк</option>
<option value="7" <?= (isset($_GET['car_body']) && ($_GET['car_body'] == 7)) ? ' selected' : null; ?>>Кабриолет</option>
<option value="8" <?= (isset($_GET['car_body']) && ($_GET['car_body'] == 8)) ? ' selected' : null; ?>>Кроссовер</option>
<option value="9" <?= (isset($_GET['car_body']) && ($_GET['car_body'] == 9)) ? ' selected' : null; ?>>Внедорожник</option>
<option value="10" <?= (isset($_GET['car_body']) && ($_GET['car_body'] == 10)) ? ' selected' : null; ?>>Минивэн</option>
<option value="11" <?= (isset($_GET['car_body']) && ($_GET['car_body'] == 11)) ? ' selected' : null; ?>>Компактвэн</option>
<option value="12" <?= (isset($_GET['car_body']) && ($_GET['car_body'] == 12)) ? ' selected' : null; ?>>Родстер</option>
<option value="13" <?= (isset($_GET['car_body']) && ($_GET['car_body'] == 13)) ? ' selected' : null; ?>>Фургон</option>
</select>
</label>
</div>
<!--Количество л.с.-->
<!---->
<div class="FullHorsePower">
<h3>Количество л.с.</h3>
<label for="HorsePower">до </label><input type="number" id="HorsePower" name="horse_power" placeholder="245" min="0" value="<?= (isset($_GET['horse_power'])) ? $_GET['horse_power'] : null; ?>"> л.с.
</div>
<!--ПТС-->
<!---->
<div class="FullPTS">
<h3>ПТС оригинал или дубликат.</h3>
<label>
<select name="pts" class="select2">
<option value="0">Не имеет значения</option>
<option value="1" <?= (isset($_GET['pts']) && ($_GET['pts'] == 1)) ? ' selected' : null; ?>>Оригинал</option>
<option value="2" <?= (isset($_GET['pts']) && ($_GET['pts'] == 2)) ? ' selected' : null; ?>>Дубликат</option>
</select>
</label>
</div>
<!----Цвет---->
<!---->
<div class="FullColor">
<h3>Цвет</h3>
<label>
<select name="color" class="select2">
<option value="0">Не имеет значения</option>
<option value="1" <?= (isset($_GET['color']) && ($_GET['color'] == 1)) ? ' selected' : null; ?>>Черный</option>
<option value="2" <?= (isset($_GET['color']) && ($_GET['color'] == 2)) ? ' selected' : null; ?>>Белый</option>
<option value="3" <?= (isset($_GET['color']) && ($_GET['color'] == 3)) ? ' selected' : null; ?>>Металлик</option>
<option value="4" <?= (isset($_GET['color']) && ($_GET['color'] == 4)) ? ' selected' : null; ?>>Коричневый</option>
<option value="5" <?= (isset($_GET['color']) && ($_GET['color'] == 5)) ? ' selected' : null; ?>>Серый</option>
<option value="6" <?= (isset($_GET['color']) && ($_GET['color'] == 6)) ? ' selected' : null; ?>>Желтый</option>
<option value="7" <?= (isset($_GET['color']) && ($_GET['color'] == 7)) ? ' selected' : null; ?>>Красный</option>
<option value="8" <?= (isset($_GET['color']) && ($_GET['color'] == 8)) ? ' selected' : null; ?>>Зеленый</option>
<option value="9" <?= (isset($_GET['color']) && ($_GET['color'] == 9)) ? ' selected' : null; ?>>Синий</option>
<option value="10" <?= (isset($_GET['color']) && ($_GET['color'] ==10 )) ? ' selected' : null; ?>>Серебристый</option>
<option value="11" <?= (isset($_GET['color']) && ($_GET['color'] == 11)) ? ' selected' : null; ?>>Бежевый</option>
<option value="12" <?= (isset($_GET['color']) && ($_GET['color'] == 12)) ? ' selected' : null; ?>>Другой</option>
</select>
</label>
</div>
<!--Коробка передач-->
<!---->
<div class="FullAKPP">
<h3>Коробка передач</h3>
<label>
<select name="akpp" class="select2">
<option value="0">Не имеет значения</option>
<option value="1" <?= (isset($_GET['akpp']) && ($_GET['akpp'] == 1)) ? ' selected' : null; ?>>Механика</option>
<option value="2" <?= (isset($_GET['akpp']) && ($_GET['akpp'] == 2)) ? ' selected' : null; ?>>Автомат</option>
<option value="3" <?= (isset($_GET['akpp']) && ($_GET['akpp'] == 3)) ? ' selected' : null; ?>>Робот</option>
<option value="4" <?= (isset($_GET['akpp']) && ($_GET['akpp'] == 4)) ? ' selected' : null; ?>>Вариатор</option>
</select>
</label>
</div>
<!--Привод-->
<!---->
<div class="FullDrive">
<h3>Привод</h3>
<label>
<select name="drive" class="select2">
<option value="0">Не имеет значения</option>
<option value="1" <?= (isset($_GET['drive']) && ($_GET['drive'] == 1)) ? ' selected' : null; ?>>Передний</option>
<option value="2" <?= (isset($_GET['drive']) && ($_GET['drive'] == 2)) ? ' selected' : null; ?>>Задний</option>
<option value="3" <?= (isset($_GET['drive']) && ($_GET['drive'] == 3)) ? ' selected' : null; ?>>Полный</option>
</select>
</label>
</div>
<!--Тип топлива-->
<!---->
<div class="FullGasoline">
<h3>Тип топлива</h3>
<label>
<select name="gasoline" class="select2">
<option value="0">Не имеет значения</option>
<option value="1" <?= (isset($_GET['gasoline']) && ($_GET['gasoline'] == 1)) ? ' selected' : null; ?>>Бензин</option>
<option value="2" <?= (isset($_GET['gasoline']) && ($_GET['gasoline'] == 2)) ? ' selected' : null; ?>>Дизель</option>
<option value="3" <?= (isset($_GET['gasoline']) && ($_GET['gasoline'] == 3)) ? ' selected' : null; ?>>Гибрид</option>
<option value="4" <?= (isset($_GET['gasoline']) && ($_GET['gasoline'] == 4)) ? ' selected' : null; ?>>Электромобиль</option>
</select>
</label>
</div>
<!---->
<!--Продавец-->
<!---->
<div class="FullWhoSell">
<h3>Продавец</h3>
<label>
<select name="who_sell" class="select2">
<option value="0">Не имеет значения</option>
<option value="1" <?= (isset($_GET['who_sell']) && ($_GET['who_sell'] == 1)) ? ' selected' : null; ?>>Собственник</option>
<option value="2" <?= (isset($_GET['who_sell']) && ($_GET['who_sell'] == 2)) ? ' selected' : null; ?>>Автосалон</option>
</select>
</label>
</div>
<!--Кнопка поиск-->
<!---->
<div>
<button class="BlueButton" name="submit" value="search">Найти</button>
</div>
</form>
</details>
</div>
Что нужно получить:
Пользователь выставляет необходимые пункты, часть из них может оставаться пустой, нажимает поиск и ему выводится в цикле Foreach необходимые данные без перезагрузки страницы.
Этот же пользователь может повторно в этой же форме выставить еще какие-то пункты и снова нажать поиск, хоть 50 раз подряд, меняться будет только вывод в цикле из того, что он выбрал.
Если нужно еще что-то дополнить из входных данных, напишите, я добавлю.
isset($_GET['gasoline'])
и пр. У вас же
перезагрузки нет. Выбрали селект, нажали кнопку - данные поменялись.
Более того - сама форма <form>
тоже не нужна. Запрос к серверу будет
формировать обработчик js.Пусть упрощенно будут такие селекты:
<select name="models">
<option value="model1">Model1</option>
<option value="model2">Model2</option>
</select>
<select name="prices">
<option value="price1">Price1</option>
<option value="price2">Price2</option>
</select>
<input id="btn" type="button" value="go">
<div id="response_container"></div>
Найти
, который будет собирать данные с селектов (ваши 16 фильтров) и отправлять на сервер.<script>
// Обработчик кнопки Найти. При клике - запускается функция runFilters()
let btn = document.getElementById('btn');
btn.addEventListener('click', runFilters);
function runFilters() {
// Получим все <select>
let selectElems = document.querySelectorAll('select');
let fd = {};
// достанем из них имя и значение, сохраним все в объекте "fd"
selectElems.forEach(function (select) {
fd[select.getAttribute('name')] = select.value;
});
// выполним запрос к серверу (методом POST)
$.ajax({
url: 'get.php',
type: 'POST',
data: fd,
success: function (response) {
$('#response_container').html(response);
}
});
}
</script>
На сервере отдельный php скрипт будет принимать эти данные. Если отправляли get запрос, то в массиве $_GET
там - 16 фильтров (или меньше, если не все выбраны). Вы их обрабатываете, собираете запрос к бд, выполняете, получаете массив с данными.
Преобразуете массив в json (или сразу в html, как вам удобнее) и отправляете обратно.
<?php
// get.php
// Здесь - делаете все что нужно с данными. Отправляете запрос к бд и т.д.
// Сейчас для демонстрации просто обернем пришедшие данные в <pre>
$response = '<pre>'.print_r($_POST, true).'</pre>';
// и отдадим:
echo $response;
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Нужен советСовсем скоро планирую добавить на сайт модуль по сбору информации о активности пользователя и подсчёта этой активности
Возникла следующая проблема — при опросе ip адресов, которые берутся с БД, на некоторых ip адресах зависает метод подключенияСуть следующая...
Имеются города city, автомойки wash и посты на них bfrs