mysql — ввод значения в одно поле & amp; оставляя другой пустой в php, вы получите неправильный результат

У меня всего 5 полей в поиске, но два (страницы и записанные_годы) имеют значения от-до. И значение для обоих будет выбрано с помощью тега option.

Теперь все работает нормально, но если кто-то просто введет значение «От» или «Кому» и оставит другое поле пустым, как его можно найти?

На страницах минимальное значение равно «1», а максимальное — «99».

В год минимальное значение равно «1990», а максимальное значение равно «2017»

Посмотрите код ниже, который я сейчас использую, и он покажет мне полный результат, в то время как нужно искать между двумя числами.

PHP & SQL для обоих полей

<?php
if(empty($_GET['search'])){

$search_keywords=$_SESSION['academic_keyword']=$_GET['academic_keyword'];

if(isset($_GET['page_from']) && $_GET['page_from']!='From'){
$search_page_from=$_GET['page_from'];
}
else{
$search_page_from_null='1';
$search_page_from = '1';
}

if(isset($_GET['page_to']) && $_GET['page_to']!='To'){
$search_page_to=$_GET['page_to'];
}
else{
$search_page_to_null='99';
$search_page_to = '99';
}

if(isset($_GET['written_year_from']) && $_GET['written_year_from']!='From'){
$search_written_year_from=$_GET['written_year_from'];
}
else{
$search_written_year_from_null='2017';
$search_written_year_from = '2017';
}

if(isset($_GET['written_year_to']) && $_GET['written_year_to']!='To'){
$search_written_year_to=$_GET['written_year_to'];
}
else{
$search_written_year_to_null='1990';
$search_written_year_to = '1990';
}

$search_price_to=$_GET['price_to'];
$search_work_id=$_GET['work_id'];

$current_year = date("Y");

if($search_page_from!='From' && $search_page_to=='99'){
$get_products="select *, LOCATE('$search_keywords',keywords3) AS keyword from academic_work where
(title like '%$search_keywords%' OR short_description like '%$search_keywords%' OR long_description like '%$search_keywords%') OR
(pages BETWEEN '$search_page_from' AND '$search_page_to') OR
(price BETWEEN '1' AND '$search_price_to') OR
(YEAR(written_year) BETWEEN '$search_written_year_from' AND '$search_written_year_to') OR
(academic_work_id like '$search_work_id')
ORDER BY keyword ASC";
}

else if($search_page_from=='1' && $search_page_to!='To'){
$get_products="select *, LOCATE('$search_keywords',keywords3) AS keyword from academic_work where
(title like '%$search_keywords%' OR short_description like '%$search_keywords%' OR long_description like '%$search_keywords%') OR
(pages BETWEEN '$search_page_from' AND '$search_page_to') OR
(price BETWEEN '1' AND '$search_price_to') OR
(YEAR(written_year) BETWEEN '$search_written_year_from' AND '$search_written_year_to') OR
(academic_work_id like '$search_work_id')
ORDER BY keyword ASC";
}

else if($search_written_year_from!='From' && $search_written_year_to_null=='1990'){
$get_products="select *, LOCATE('$search_keywords',keywords3) AS keyword from academic_work where
(title like '%$search_keywords%' OR short_description like '%$search_keywords%' OR long_description like '%$search_keywords%') OR
(pages BETWEEN '$search_page_from' AND '$search_page_to') OR
(price BETWEEN '1' AND '$search_price_to') OR
(YEAR(written_year) BETWEEN '$search_written_year_from' AND '$search_written_year_to_null') OR
(academic_work_id like '$search_work_id')
ORDER BY keyword ASC";
}

else if($search_written_year_from_null=='2017' && $search_written_year_to!='To'){
$get_products="select *, LOCATE('$search_keywords',keywords3) AS keyword from academic_work where
(title like '%$search_keywords%' OR short_description like '%$search_keywords%' OR long_description like '%$search_keywords%') OR
(pages BETWEEN '$search_page_from' AND '$search_page_to') OR
(price BETWEEN '1' AND '$search_price_to') OR
(YEAR(written_year) BETWEEN '$search_written_year_from_null' AND '$search_written_year_to') OR
(academic_work_id like '$search_work_id')
ORDER BY keyword ASC";
}

Заранее спасибо 🙂

0

Решение

Там вы присваивали две разные переменные в условиях if else и в запросе SELECT вы правильно используете эти две переменные. Итак, моя точка зрения: если бы еще условие, любая из частей была бы выполнена так, чтобы из двух переменных была назначена любая из них, но вы используете эти две переменные в запросе SELECT.

Это вы должны исправить в зависимости от ваших потребностей.
Пример кода предложения.

if(isset($_GET['written_year_from']) && $_GET['written_year_from']!='From'){
$search_written_year_from=$_GET['written_year_from'];
}
else{
$search_written_year_from_null='1990';
$search_written_year_from = '1990'; // using this variable in page_from conditions
}

Повторите это для всех условий. Надеюсь, поможет.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector