Я пытаюсь внедрить фильтры, которые помогут пользователям улучшить поиск других пользователей. Вот изображение из моих параметров поиска только предоставить вам графическое представление того, что я в скором времени передать:Фильтры не работают (Выполнение различных запросов PHP на основе параметров)
Есть три фильтра:
- Пол
- Возраст
- Сходство в исследованиях
По умолчанию, я хочу чтобы передать всех пользователей в систему. Поэтому, когда пользователь переходит на users.php
, каждый пользователь будет отображаться, а затем, когда применяются фильтры, уточните результаты соответственно.
Не все три параметра должны быть заполнены, чтобы начать поиск, например, пользователь может просто найти пользователя-женщину, и он должен отображать всех женщин-пользователей при нажатии на поиск.
Я попытался реализовать разные запросы для каждого сценария, но все пользователи всегда отображаются. Если я укажу, что хочу найти женщину, а затем нажать «Поиск», она ничего не сделает, показывая все пользователи.
Кроме того, я борюсь с параметром similarity in studies
. Способ, которым это работает, заключается в том, что в таблице под названием user_bio
Я храню данные о том, что изучает пользователь, пользователь может не предоставлять эту информацию, поэтому изучение также может быть пустым в моей таблице.
Способ, которым я хочу, чтобы он работал, - это посмотреть, что изучил пользователь, а затем найти слова, которые соответствуют другим бионам других народов. Например, я в настоящее время зарегистрирован как Конор, а Конор изучает компьютерную науку. В идеале, будет запускаться алгоритм, который ищет другие пользователи из таблицы user_bio
и возвращает всех пользователей, у которых есть computer
или science
в своей биографии. Я уверен, что это относится к статье LIKE
, но я никогда не использовал ее раньше, поэтому я не могу быть уверен.
Вот мой текущий подход:
// processing filters
$refined_gender = htmlentities (strip_tags(@$_POST['gender']));
$age_from = htmlentities (strip_tags(@$_POST['age_from']));
$age_to = htmlentities (strip_tags(@$_POST['age_to']));
$studying = htmlentities (strip_tags(@$_POST['studying']));
$get_all_users = mysqli_query ($connect, "SELECT * FROM users");
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
if (isset($_POST['submit'])){
// if gender parameter is used ...
if ($refined_gender){
$gender_statement = mysqli_prepare ($connect, "SELECT * FROM users WHERE gender = ?");
mysqli_stmt_bind_param($gender_statement, "s", $refined_gender);
mysqli_stmt_execute ($gender_statement);
mysqli_stmt_close($gender_statement);
}
// if studying parameter used...
if ($studying) {
// see explanation below...
}
// if gender and age parameter used...
if ($refined_gender && $age_from && $age_to){
$gen_and_age_statement = mysqli_prepare ($connect, "SELECT * FROM users WHERE gender = ? AND age BETWEEN ? AND ?");
mysqli_stmt_bind_param($gen_and_age_statement, "sss", $refined_gender, $age_from, $age_to);
mysqli_stmt_execute ($gen_and_age_statement);
mysqli_stmt_close($gen_and_age_statement);
}
}
Резюме, что мне нужно:
SELECT * FROM users
запрос будет выполняться по умолчаниюusers.php
. Это покажет всех пользователей в системе.- Для любого применяемого фильтра. Не все фильтры должны применяться для получения результата, пользователь может искать женщину и искать по клику, загружая всех женщин-пользователей в систему.
- Мне нужен запрос для изменения в зависимости от того, какие фильтры были применены. Поэтому, если пользователь искал пользователя-пользователя, а остальные два параметра не выбраны, тогда запрос будет
"SELECT * FROM users WHERE gender = '$var_here'
.
Я бы рекомендовал не подавлять сообщения об ошибках, а обрабатывать их. Большинство из них можно решить с помощью простого isset(); –
'if ($ refined_gender && $ age_from && $ age_to)' почему вы проверяете, являются ли эти переменные истинными? – Black
@EdwardBlack - мой мыслительный процесс позади этого был «если поля имеют данные в них, или опция выбрана, сделайте это ...». – Freddy