фильтр выборки по цене

klassev
На сайте с 09.08.2007
Offline
135
#21

$start_cost = (int)$_GET["start_cost"];

$end_cost = (int)$_GET["end_cost"];

if (!empty($start_cost) OR !empty($end_cost))

{

$query_cost = " AND cost BETWEEN $start_cost AND $end_cost";

}

при нулевых значениях выполняться не будет...поэтому и нет сортировки

if (isset($_GET['start_cost']) && isset($_GET['end_cost']))

{

$start_cost = (int)$_GET['start_cost'];

$end_cost = (int)$_GET['end_cost'];

$query_cost = " AND cost BETWEEN $start_cost AND $end_cost";

}

при нулевых значениях выполняться должно

...и не нужно ничего городить

ЗЫ

для empty() ноль пустое значение

http://php.net/manual/ru/function.empty.php

bupy7
На сайте с 18.03.2014
Offline
30
#22
klassev:
$start_cost = (int)$_GET["start_cost"];
$end_cost = (int)$_GET["end_cost"];

if (!empty($start_cost) OR !empty($end_cost))

{
$query_cost = " AND cost BETWEEN $start_cost AND $end_cost";
}

при нулевых значениях выполняться не будет...поэтому и нет сортировки

if (isset($_GET['start_cost']) && isset($_GET['end_cost']))
{
$start_cost = (int)$_GET['start_cost'];
$end_cost = (int)$_GET['end_cost'];

$query_cost = " AND cost BETWEEN $start_cost AND $end_cost";
}

при нулевых значениях выполняться должно

...и не нужно ничего городить

Полезность вашего кода стремится к 0. Можно вообще тогда isset убрать раз там (int). Потом, автору не просто выбор между нужен. И, не сортировка, а фильтрация.

---------- Добавлено 17.02.2015 в 21:22 ----------

klassev:
для empty() ноль пустое значение
http://php.net/manual/ru/function.empty.php

всё верно. никто и не отрицает.

M
На сайте с 01.10.2014
Offline
61
#23

когда заполняю только первое поле и когда заполняю одинаковыми значениями два поля: bool(false)

Лучшая вап клик пп для выкупа подписок (https://mcwap.ru/?r=1153)
klassev
На сайте с 09.08.2007
Offline
135
#24
bupy7:
Полезность вашего кода стремится к 0. Можно вообще тогда isset убрать раз там (int). Потом, автору не просто выбор между нужен. И, не сортировка, а фильтрация.

---------- Добавлено 17.02.2015 в 21:22 ----------


всё верно. никто и не отрицает.

ему нужно вытащить в диапазоне - значит нужны старт и енд значения, их наличие мы проверяем иссетом - так?

значит isset - нужен, чтобы не вываливалась ошибка при отсутствии значений....

если заданы оба значения int переводит их из строки в цифру и подставляем...что не так?

в каком месте стремится к 0? ;)

bupy7
На сайте с 18.03.2014
Offline
30
#25

mortido, Надо значения и имена полей в одинарные кавычки обрамлять, а таблиц в грависы.

---------- Добавлено 17.02.2015 в 21:37 ----------

klassev:
ему нужно вытащить в диапазоне - значит нужны старт и енд значения, их наличие мы проверяем иссетом - так?

isset в этом случае всегда даст true, а нам не просто диапазон нужен. =)

klassev:
если заданы оба значения int переводит их из строки в цифру и подставляем...что не так?

всё верно

---------- Добавлено 17.02.2015 в 21:39 ----------

mortido, покажи еще после mysql_query что будет

var_dump("SELECT * FROM cards WHERE class_id $query_cost $query_class $query_quality $query_nabor");die();
klassev
На сайте с 09.08.2007
Offline
135
#26
bupy7:
mortido, Надо значения и имена полей в одинарные кавычки обрамлять, а таблиц в грависы.

---------- Добавлено 17.02.2015 в 21:37 ----------


isset в этом случае всегда даст true, а нам не просто диапазон нужен. =)


всё верно

как он вам даст true , в случае , если гетом не передается на пример start_cost ???

bupy7
На сайте с 18.03.2014
Offline
30
#27
klassev:
как он вам даст true , в случае , если гетом не передается на пример start_cost ???

у автора в форму оба значения попадают. Если одно из не попадёт, то это уже не between запрос, а больше или меньше. Но, т.к. у ТС всё же оба они попадают - выкручиваемся как можем :D

Чего срёмся-то?) Давайте жить дружно. (с)

M
На сайте с 01.10.2014
Offline
61
#28
bupy7:


mortido, покажи еще после mysql_query что будет

var_dump("SELECT * FROM cards WHERE class_id $query_cost $query_class $query_quality $query_nabor");die();

string(52) "SELECT * FROM cards WHERE class_id AND `cost`=>3 "

bupy7
На сайте с 18.03.2014
Offline
30
#29
mortido:
string(52) "SELECT * FROM cards WHERE class_id AND `cost`=>3 "

только не один cost нужно оборачивать. И что там class_id делает? Смысл в нем есть для запроса?)

Тьфу блин. Я запрос неправильно отправил. 🤪 хотя тогда б работал between

klassev
На сайте с 09.08.2007
Offline
135
#30

Та бросьте...кто среться... ;) помогаем же разобраться....

Попробую еще раз.

Изначально его условие (которое с нулями) не выполнялось т.к. значения проверялись при помощи empty а т.к. для empty 0 пустое значение, то запрос с BETWEEN не добавлялся.... с пятёркой же все работало...значит дело только к нулях

если быть на 100% уверенным, что оба значение передаются гетом? то конечно можно не пользоваться isset ом ... это так... для подстраховки. ну тогда достаточно просто int и в запрос.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий