Работа с формами — это основа любого интерактивного сайта. Но принимать данные от пользователей вслепую опасно и неэффективно. В этом уроке мы разберемся, как проверять, что введённые значения являются числами. Это называется валидацией. Ты научишься использовать встроенные в PHP функции, чтобы убедиться, что возраст, количество товара или цена указаны корректно. Эти задания помогут тебе писать более надежный и безопасный код, который не боится ошибочного ввода от пользователя. Мы пройдем путь от самых простых проверок до использования современных и мощных фильтров данных.
- Модуль 1: Основы синтаксиса PHP
- Модуль 2: Переменные и типы данных
- Модуль 3: Операторы
- Модуль 4: Условные конструкции
- Модуль 5: Циклы
- Модуль 6: Массивы
- Индексированные массивы.
- Ассоциативные массивы.
- Многомерные массивы.
- Добавление элементов в массив.
- Удаление элементов из массива.
- Функция count().
- Функция array_push() и array_pop().
- Функция array_shift() и array_unshift().
- Функция array_merge().
- Функция array_slice().
- Функция array_splice().
- Функция in_array().
- Функция array_search().
- Функция array_keys() и array_values().
- Функция array_unique().
- Функция array_reverse().
- Сортировка: sort(), rsort().
- Сортировка: asort(), arsort().
- Сортировка: ksort(), krsort().
- Функция array_map().
- Функция array_filter().
- Функция array_reduce().
- Функция array_walk().
- Функция array_column().
- Деструктуризация массивов.
- Модуль 7: Функции
- Объявление функций.
- Вызов функций.
- Параметры функций.
- Возврат значений return.
- Значения параметров по умолчанию.
- Передача по значению.
- Передача по ссылке.
- Переменное количество аргументов.
- Оператор распаковки ....
- Типизация параметров.
- Типизация возвращаемых значений.
- Nullable типы.
- Union типы (PHP 8).
- Именованные аргументы (PHP 8).
- Анонимные функции.
- Стрелочные функции.
- Замыкания и use.
- Рекурсивные функции.
- Глобальные переменные в функциях.
- Статические переменные в функциях.
- Модуль 8: Работа со строками
- Одинарные и двойные кавычки.
- Экранирование символов.
- Heredoc и Nowdoc синтаксис.
- Функция strlen().
- Функция substr().
- Функция str_replace().
- Функция strpos() и strrpos().
- Функция explode() и implode().
- Функция trim(), ltrim(), rtrim().
- Функция strtolower() и strtoupper().
- Функция ucfirst() и ucwords().
- Функция str_repeat().
- Модуль 9: Суперглобальные переменные
- Модуль 10: Работа с формами
- Обработка GET-запросов.
- Валидация чисел.
- Модуль 11: Работа с файлами
- Модуль 12: Дата и время
- Модуль 13: Регулярные выражения
- Модуль 14: Сессии и Cookie
- Модуль 15: Include и Require
- Модуль 16: Объектно-ориентированное программирование
- Модуль 17: Пространства имен
- Модуль 18: Обработка ошибок и исключений
- Модуль 19: Работа с JSON и XML
- Модуль 20: Работа с базами данных MySQLi
- Модуль 21: PDO - PHP Data Objects
- Модуль 22: Composer и зависимости
- Модуль 23: cURL и HTTP запросы
- Модуль 24: REST API
- Модуль 25: Безопасность
- Модуль 26: Генераторы и итераторы
- Модуль 27: Reflection API
- Модуль 28: Работа с изображениями
- Модуль 29: Отправка email
- Модуль 30: Паттерны проектирования
- Модуль 31: Тестирование
- Модуль 32: Продвинутые возможности PHP 8+
Простая проверка на число
Давай начнем с основ. В PHP есть специальная функция для проверки, является ли переменная числом или числовой строкой. Дополни код, чтобы он проверял значение переменной $input и выводил "Это число", если проверка прошла успешно.
<?php
$input = "25"; // Это значение может прийти из формы
if (input1S(input2S)) {
echo "Это число";
} else {
echo "Это не число";
}
?>Найди ошибку в проверке типа
Программист попытался проверить, что возраст, полученный из формы, является числом. Однако он допустил частую ошибку новичков. Данные из форм всегда приходят в виде строк. Код не работает так, как ожидалось. Найди и исправь ошибку в строке с условием.
<?php// Представим, что это значение пришло из формы$age_from_form = "30"; if (is_int($age_from_form)) { echo "Возраст корректен";} else { echo "Ошибка: возраст должен быть числом.";}?>Что вернет is_numeric?
Функция is_numeric() довольно гибкая. Она распознает не только обычные числа, но и строки, содержащие числа в разных форматах, включая экспоненциальную запись. Посмотри на код и определи, что он выведет на экран.
<?php
$value = "1.5e2";
var_dump(is_numeric($value));
?>Современная валидация с filter_var
Хотя is_numeric() полезна, в PHP есть более мощный и предпочтительный инструмент для валидации данных — функция filter_var(). Она позволяет применять различные фильтры к значению. Собери из предложенных частей работающий код для проверки, является ли значение целым числом.
<?php
$count = "100";
$validated_count = input1S(input2S, input3S);
if ($validated_count !== false) {
echo "Значение является целым числом: " . $validated_count;
} else {
echo "Значение не является целым числом.";
}
?>Результат фильтрации при неудаче
Важно понимать, что возвращает filter_var() не только при успехе, но и при неудаче. Если значение не проходит валидацию, функция возвращает определенное значение. Посмотри на код и напиши, что именно выведет var_dump().
<?php
$not_a_number = "oops";
$result = filter_var($not_a_number, FILTER_VALIDATE_INT);
var_dump($result);
?>Сопоставь фильтры и их назначение
У `filter_var()` есть множество фильтров не только для валидации, но и для "очистки" (санитизации) данных. Сопоставь константы фильтров в правой колонке с их описаниями в левой.
FILTER_SANITIZE_NUMBER_INTFILTER_VALIDATE_FLOATFILTER_VALIDATE_INTПроверка числового диапазона
Часто недостаточно просто проверить, что значение — это число. Нужно также убедиться, что оно попадает в определённый диапазон. Дополни код так, чтобы он проверял, что возраст (переменная $age) находится в диапазоне от 18 до 65 лет включительно.
<?php
$age = 25;
$is_valid = false;
if (is_numeric($age)) {
// Преобразуем строковое значение из формы в число
$age = (int)$age;
if (input1S && input2S) {
$is_valid = true;
}
}
var_dump($is_valid);
?>Сборка скрипта валидации количества
Собери из фрагментов полноценный PHP-скрипт. Он должен обрабатывать POST-запрос, получать из него 'quantity', проверять, что это целое число больше нуля, и выводить соответствующее сообщение. Некоторые фрагменты лишние и не должны использоваться.
echo "Количество принято: " . $quantity;if ($_SERVER['REQUEST_METHOD'] == 'POST') {$quantity = $_POST['quantity'];<?php} else {if (filter_var($quantity, FILTER_VALIDATE_INT) && $quantity > 0) {echo "Ошибка: введите положительное число.";}// $_POST['quantity'] = 5; // Установка значения для тестаif ($quantity < 0) {?>Исправь логическую ошибку
Этот скрипт должен выводить сообщение об ошибке, если введенное количество товара меньше 1 или больше 10. Однако из-за логической ошибки в условии, сообщение об ошибке никогда не выводится. Найди и исправь строку с ошибочной логикой.
<?php$items = 0; // Пример ввода $items = filter_var($items, FILTER_VALIDATE_INT); if ($items !== false) { if ($items < 1 && $items > 10) { echo "Ошибка: количество должно быть от 1 до 10."; } else { echo "Количество в допустимом диапазоне."; }} else { echo "Ошибка: введите целое число.";}?>