- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
В 2023 году 36,9% всех DDoS-атак пришлось на сферу финансов
А 24,9% – на сегмент электронной коммерции
Оксана Мамчуева
Как снизить ДРР до 4,38% и повысить продажи с помощью VK Рекламы
Для интернет-магазина инженерных систем
Мария Лосева
Всем привет. есть скрипт php, который выводит все, что входит в диапазон, который ввел пользователь. Вот он:
$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";
}
проблема в том, что если я ввожу ноль в поле start_cost и также ноль в поле end_cost, то мне просто выводится все, что есть в таблице, но если я ввожу, например 5 туда и 5 туда, то скрипт будет выводить все данные в таблице, которые входят в этот диапазон(То есть имеют стоимость 5, например). Что нужно изменить, чтобы это также работало и с нулем?
попробуй условие
попробуй условие
то что нужно. спасибо)
totamon, и что это должно дать по вашему мнению? Это будет всегда давать true, что бы там не было.
if (isset($_GET['start_cost']) || isset($_GET['end_cost']))
totamon, и что это должно дать по вашему мнению? Это будет всегда давать true, что бы там не было.
if (isset($_GET['start_cost']) || isset($_GET['end_cost']))
а не знаете в чем тут может быть дело: если я заполняю только поле start_cost, а end_cost оставляю пустым, то из таблицы ничего не выводится, но если заполняю оба поля или последнее поле, то все выводится правильно. В чем тут может быть проблема?
mortido, потому что используется between. По сути, здесь нужно совсем по другому делать. И в итоге вот так должно быть, к примеру, но может и не работать корректно, потому что я полного представления о работе поиска не имею:
$start_cost = (int)$_GET['start_cost'];
$end_cost = (int)$_GET['end_cost'];
if (isset($_GET['start_cost']) && isset($_GET['end_cost'])) {
$query_cost = " AND cost BETWEEN {$start_cost} AND {$end_cost}";
} elseif (isset($_GET['start_cost'])) {
$query_cost = " AND cost=>{$start_cost}";
} elseif (isset($_GET['end_cost'])) {
$query_cost = " AND cost<={$end_cost}";
}
totamon, и что это должно дать по вашему мнению? Это будет всегда давать true, что бы там не было.
if (isset($_GET['start_cost']) || isset($_GET['end_cost']))
согласен с вашим вариантом, хотел обратить внимание что нужно поменять !empty на isset,
тк 0 это как раз пустое значение и не попадает в фильтр.
mortido, потому что используется between. По сути, здесь нужно совсем по другому делать. И в итоге вот так должно быть, к примеру, но может и не работать корректно, потому что я полного представления о работе поиска не имею:
$start_cost = (int)$_GET['start_cost'];
$end_cost = (int)$_GET['end_cost'];
if (isset($_GET['start_cost']) && isset($_GET['end_cost'])) {
$query_cost = " AND cost BETWEEN {$start_cost} AND {$end_cost}";
} elseif (isset($_GET['start_cost'])) {
$query_cost = " AND cost=>{$start_cost}";
} elseif (isset($_GET['end_cost'])) {
$query_cost = " AND cost<={$end_cost}";
}
к сожалению, также выводит как и мой предыдущий код
mortido, вот поэтому я и написал, что мне неизвестно что уходит в запрос. Что у вас $start_cost и $end_cost можете прислать? Добавьте после
$start_cost = (int)$_GET['start_cost'];
$end_cost = (int)$_GET['end_cost'];
это
var_dump($start_cost, $end_cost);die();
и установите дефолтные значения поиска и отправьте запрос. Результат var_dump сюда.
обычные текстовые поля:
<input type="text" name="start_cost" />
<input type="text" name="end_cost" />
а результат var_dump: int(0) int(0)
$start_cost = (int)$_GET['start_cost'];
$end_cost = (int)$_GET['end_cost'];
if ($start_cost && $end_cost && $start_cost < $end_cost) {
$query_cost = " AND cost BETWEEN {$start_cost} AND {$end_cost}";
} elseif ($start_cost > $end_cost || $start_cost == $end_cost) {
$query_cost = " AND cost=>{$start_cost}";
} elseif ($start_cost < $end_cost) {
$query_cost = " AND cost<={$end_cost}";
}