Я хочу защитить свою страницу, проверив, является ли это значение цифровым (0,1,2,3), и если оно находится в диапазоне от 0 до 120. Я думаю, функция ctype_digit
ограничивает число, поэтому не может быть передано какое-либо отрицательное число. Как я могу ограничить максимальное значение самым простым способом?
if (!ctype_digit($_GET['category'] AND ...) die(''); if (!ctype_digit($_GET['category'] > 120) ?
Я intval
о intval
но он может передавать отрицательные числа.
if (!ctype_digit($_GET['category']) || $_GET['category'] > 120) die('')
В основном это говорит: «Если это не число или если оно больше 120, остановитесь»
Вы можете взглянуть на фильтрацию данных PHP .
Он предоставляет фильтр для вашей задачи ( FILTER_VALIDATE_INT
), который также принимает параметры min_range
и max_range
:
$value = filter_var($_GET['category'], FILTER_VALIDATE_INT, array( 'options' => array( // An optional default value 'default' => 123, // Desired validation range 'min_range' => 0, 'max_range' => 120 ), )); // $value is FALSE when validation failed, or an "int" with // the correct value.
if (is_int($_GET['category']) and $_GET['category'] > 0 and $_GET['category'] <= 120)
Это проверяет, больше ли число больше нуля и меньше или равно 120.
if(!ctype_digit($_GET['category']) || $_GET['category'] > 120) { ...
// Make sure it is an integer. $category = (int) $_GET['category']; if($category<0 OR $category>120){ // Code to be executed if the number is out of range... }
Не ответ, но вот почему то, что у вас было, не получилось:
if (!ctype_digit($_GET['category'] > 120) ? ^^^^^^^^^^^^^^^^^^^^^^^
Указанная часть находится внутри вызова ctype. Поэтому первый PHP проверяет, превышает ли значение GET 120, превратив это в логическое значение true / false. THEN применяется ctype, который всегда будет false, поскольку логическое значение не является цифрой.
if(!ctype_digit($_GET['category']) || $_GET['category'] > 120) //do whatever you want
Я добавляю это, так как некоторые люди могут наткнуться на поиск пути к этой задаче на основе темы вашего вопроса.
Иногда вы просто хотите «ограничить максимальное значение числовой переменной».
$val=($val <= 120)?$val:120;
Это лучший способ, который я нашел в одной строке (комбинация min () и max () может сделать то же самое, но это намного больше интенсивных вычислений). Если значение $ val больше 120, оно будет обрезано до 120, иначе исходное значение используется.