Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
2 / 2 / 1
Регистрация: 08.06.2017
Сообщений: 28

Запись только числовых значений в определенном диапазоне

14.05.2018, 15:02. Показов 992. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, на моем домашнем сайте установлена 5-ти бальная система рейтинга определенной записи путем выбора числового значения от одного до пяти, которое добавляется в последствии в БД. Некоторое время назад я заметил что некоторые записи имеют огромные значения рейтинга (1000 и более) при всего 3-х голосах, тогда как максимально должно быть всего не более 15. Выяснилось что в адресной строке в обход графической системе ввода можно подставлять любые значения, что кто-то и делает. Я вижу что идет проверка только на числовые значения с выводом определенной ошибки, если оно не соответствует типу, подскажите пожалуйста сюда как-то можно добавить так-же диапазон ввода числа только от 1 до 5 ?

PHP
1
2
3
4
5
6
7
if(isset($_REQUEST['rating']) and isset($_REQUEST['id'])) {
    if (!is_numeric($_REQUEST['rating'])) {
        exit("Error: the rating must be a numeric value.");
    }
    if (!is_numeric($_REQUEST['id'])) {
        exit("Error: the recording ID must be a numeric value.");
    }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.05.2018, 15:02
Ответы с готовыми решениями:

отображение записей только в определённом диапазоне
Имеется столбец с датами, простой - текстовый столбец. В данном столбце находятся так же и пустые ячейки. Вопрос: Как мне...

Ввод чисел в TextBox только в определенном диапазоне
Есть поле TextBox3. Там содержится день. Я настроил чтобы вводились только цифры. MaxLenght поставил 2. 1. Как сделать если введено число...

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

8
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
14.05.2018, 15:10
PHP
1
2
3
if ($_REQUEST['rating'] >= 1 &&  $_REQUEST['rating'] <= 5) {
        exit("bla bla bla");
    }
Не стыдно такое спрашивать?)
0
2 / 2 / 1
Регистрация: 08.06.2017
Сообщений: 28
14.05.2018, 15:51  [ТС]
Спасибо, я практически не знаю синтаксис языка поэтому и пришлось просить помощи здесь. Все что я попробовал, к сожалению не дало никаких результатов.

Ваш код к сожалению также не работает, я теперь при любом значении получаю надпись "the rating must be a numeric value".

PHP
1
2
3
4
5
6
7
if(isset($_REQUEST['rating']) and isset($_REQUEST['id'])) {
    if (!is_numeric($_REQUEST['rating'] >= 1 &&  $_REQUEST['rating'] <= 5)) {
        exit("Error: the rating must be a numeric value.");
    }
    if (!is_numeric($_REQUEST['id'])) {
        exit("Error: the recording ID must be a numeric value.");
    }
Добавлено через 24 минуты
В чем ошибка подскажите пожалуйста ?
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
14.05.2018, 16:43
Здесь получается boolean-значение:
PHP
1
$_REQUEST['rating'] >= 1 &&  $_REQUEST['rating'] <= 5
А Вы проверяете на numeric. Естественно, будет выполнен первый exit.

Добавлено через 3 минуты
PHP
1
2
3
4
5
$rating = filter_input(INPUT_GET, 'rating', FILTER_SANITIZE_NUMBER_INT);
 
if ($rating < 1 || $rating > 5) {
    exit("Error: the rating must be a value between 1 and 5.");
}
Добавлено через 38 минут
А можно так:
PHP
1
2
3
4
5
6
7
8
9
10
$rating = filter_input(INPUT_GET, 'rating', FILTER_VALIDATE_INT, [
    'options' => [
        'min_range' => 1,
        'max_range' => 5
    ],
]);
 
if (!$rating) {
    # Error ...
}
1
2 / 2 / 1
Регистрация: 08.06.2017
Сообщений: 28
14.05.2018, 17:04  [ТС]
Para bellum, если использовать код в точности приведенный пользователем tarasalk, без использования "numeric" то при вводе любого числового значения я получаю сообщение с такой же ошибкой, но в этом случае в БД еще и можно попытаться записать все остальные типы данных, кроме нужных числовых, они естественно фактически не будут записаны так как тип данных в таблице не позволяет это сделать но один голос с нулевым значением добавляется чего также быть не должно так как это влияет на оценку.

Ваш первый вариант работает замечательно, теперь выводится сообщение с ошибкой при любом другом значении включая другие типы данных и минусовые числа (ранее вносились и они). Второй вариант не работает, можно внести любой тип данных вообще. Большое спасибо Вам!
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
14.05.2018, 17:53
Цитата Сообщение от Clover7 Посмотреть сообщение
если использовать код в точности приведенный пользователем tarasalk, без использования "numeric" то при вводе любого числового значения я получаю сообщение с такой же ошибкой
Он ошибся просто. Ошибка должна быть, если его условие не выполнится, а он её выводит, если условие выполняется.
Цитата Сообщение от Clover7 Посмотреть сообщение
Второй вариант не работает, можно внести любой тип данных вообще.
Ну так добавьте в IF exit. Я там просто комментарий указал. Вот так будет работать:
PHP
1
2
3
if (!$rating) {
    exit("Error: the rating must be a numeric value between 1 and 5.");
}
1
2 / 2 / 1
Регистрация: 08.06.2017
Сообщений: 28
14.05.2018, 18:09  [ТС]
Para bellum, я правильно понимаю что предпочтительней использовать именно второй вариант ?
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
14.05.2018, 19:09
Да. На то в PHP filter_* функции и существуют.
Ещё лучше будет, если и ID тоже таком образом получать будете.

Добавлено через 7 минут
PHP
1
2
3
4
5
6
7
8
9
10
11
12
$input = filter_input_array(INPUT_GET, [
    'id' => FILTER_VALIDATE_INT,
    'rating' => [
        'filter' => FILTER_VALIDATE_INT,
        'options' => [
            'min_range' => 1,
            'max_range' => 5
        ],
    ]
]);
 
# Тут проверяйте, есть ли ошибки
1
2 / 2 / 1
Регистрация: 08.06.2017
Сообщений: 28
14.05.2018, 19:30  [ТС]
С переменной ID у меня нет никаких проблем, если значение введено не корректно отображается специальное сообщение, на сайте так-же есть возможность скрыть любые записи и сделать их доступными только для администратора, возможно с этим тоже могут быть связаны какие то нюансы в коде, поэтому трогать здесь что либо желания нет. Спасибо Вам.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.05.2018, 19:30
Помогаю со студенческими работами здесь

Excel : В выделенном диапазоне выделить жёлтым фоном те ячейки, которые не содержат числовых значений
2. Excel : В выделенном диапазоне выделить жёлтым фоном те ячейки, которые не содержат числовых значений.

Проверка условия, чтобы числа могли быть введены только в определенном диапазоне
Здравствуйте. Последовательно пользователь вводит пять чисел, значениях которых присваиваются пяти переменным(n1,n2,n3,n4,n5). ...

Выбор только числовых значений
Здравствуйте, Уважаемые Форумчане. Помогите решить проблему. Нужно что бы из столбца А, таблицы с данными, выбирались только числовые...

Из одноимённых процессов убить только тот, у которого использование памяти находится в определённом диапазоне
Добрый день! Есть задача периодически убивать один из процессов Java. Отличие его от остальных Java только в размере отожранной памяти...

Разрешить ввод только числовых значений в Edit
В общем проблема вот в чем: Как в Делфи сделать так чтобы в элемент формы Edit можно было вводить только числовые значения, и потом их...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru