Методы проверки входных данных
Проверяйте обязательные поля, типы и длину данных до их обработки
«Методы проверки входных данных» — бесплатный урок PHP Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения PHP Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс PHP Academy содержит 4 уроков всего.
Зачем проверять входные данные?
Никогда не доверяйте данным, полученным от пользователей. Проверка гарантирует, что данные соответствуют вашим требованиям до их обработки. Она предотвращает:
- ошибки базы данных из-за неверных типов
- ошибки бизнес-логики из-за неожиданных значений
- уязвимости безопасности из-за вредоносных входных данных
Проверка обязательных полей
Проверяйте, что обязательные поля не пусты после удаления пробельных символов:
<?php
$errors = [];
$name = trim($_POST['name'] ?? '');
$email = trim($_POST['email'] ?? '');
if (empty($name)) {
$errors['name'] = 'Name is required';
}
if (empty($email)) {
$errors['email'] = 'Email is required';
}
if (!empty($errors)) {
// show errors
}Проверка типа
Проверяйте, что значения имеют ожидаемый тип, прежде чем использовать их:
<?php
$age = $_POST['age'] ?? '';
// Method 1: filter_var
$validAge = filter_var($age, FILTER_VALIDATE_INT, [
'options' => ['min_range' => 1, 'max_range' => 120]
]);
if ($validAge === false) {
$errors[] = 'Age must be a number between 1 and 120';
}Проверка адреса электронной почты
Проверяйте адреса электронной почты с помощью фильтра FILTER_VALIDATE_EMAIL:
<?php
$email = trim($_POST['email'] ?? '');
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$errors[] = 'Invalid email address';
}
// Also check domain has MX record for extra validation
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
[$user, $domain] = explode('@', $email);
if (!checkdnsrr($domain, 'MX')) {
$errors[] = 'Email domain not found';
}
}Проверка длины строки
Устанавливайте минимальную и максимальную длину строк:
<?php
$username = trim($_POST['username'] ?? '');
$len = mb_strlen($username);
if ($len < 3) {
$errors[] = 'Username must be at least 3 characters';
}
if ($len > 30) {
$errors[] = 'Username must be at most 30 characters';
}Проверка по белому списку
Проверяйте значения по разрешённому набору (белому списку), а не пытайтесь блокировать недопустимые значения:
<?php
$allowedRoles = ['admin', 'editor', 'viewer'];
$allowedSorts = ['name', 'date', 'price'];
$role = $_POST['role'] ?? '';
$sort = $_GET['sort'] ?? 'name';
if (!in_array($role, $allowedRoles, true)) {
$errors[] = 'Invalid role selected';
}
// Default to 'name' if sort value invalid
if (!in_array($sort, $allowedSorts, true)) {
$sort = 'name';
}Проверка URL и IP-адресов
Проверяйте URL и IP-адреса с помощью встроенных фильтров:
<?php
$url = $_POST['website'] ?? '';
$ip = $_POST['ip'] ?? '';
if (!filter_var($url, FILTER_VALIDATE_URL)) {
$errors[] = 'Invalid URL';
}
if (!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
$errors[] = 'Invalid IPv4 address';
}Проверка шаблона с помощью регулярного выражения
Используйте preg_match() для проверки пользовательского формата:
<?php
$phone = preg_replace('/[^0-9+]/', '', $_POST['phone'] ?? '');
// Validate format: +1234567890
if (!preg_match('/^\+?[0-9]{7,15}$/', $phone)) {
$errors[] = 'Invalid phone number';
}
// Validate date format YYYY-MM-DD
$date = $_POST['date'] ?? '';
if (!preg_match('/^\d{4}-\d{2}-\d{2}$/', $date)) {
$errors[] = 'Date must be in YYYY-MM-DD format';
}Проверка даты
Проверяйте, что строка представляет собой настоящую календарную дату:
<?php
function isValidDate(string $date, string $format = 'Y-m-d'): bool {
$d = DateTime::createFromFormat($format, $date);
return $d && $d->format($format) === $date;
}
var_dump(isValidDate('2024-02-29')); // true (2024 is leap year)
var_dump(isValidDate('2023-02-29')); // false (not a leap year)
var_dump(isValidDate('2024-13-01')); // false (no month 13)Проверка загружаемых файлов
Проверяйте загруженные файлы по типу, размеру и коду ошибки:
<?php
$file = $_FILES['photo'] ?? null;
if ($file) {
if ($file['error'] !== UPLOAD_ERR_OK) {
$errors[] = 'Upload failed with error: ' . $file['error'];
} elseif ($file['size'] > 2 * 1024 * 1024) {
$errors[] = 'File exceeds 2MB limit';
} elseif (!in_array(mime_content_type($file['tmp_name']), ['image/jpeg', 'image/png'])) {
$errors[] = 'Only JPEG and PNG files allowed';
}
}Отображение ошибок проверки
Показывайте ошибки рядом с соответствующими полями формы и сохраняйте введённые пользователем значения:
<?php
// Preserve entered values:
$name = htmlspecialchars($_POST['name'] ?? '');
?>
<form method="POST">
<input name="name" value="<?= $name ?>">
<?php if (isset($errors['name'])): ?>
<p class="error"><?= htmlspecialchars($errors['name']) ?></p>
<?php endif; ?>
<button type="submit">Submit</button>
</form>Быстрая проверка
Что означает подход с использованием белого списка при проверке?
Повторение: проверка входных данных
Рекомендации по проверке:
- Проверяйте обязательные поля после trim()
- Используйте
filter_var()для проверки типа и формата - Проверяйте разрешённые значения по белому списку с помощью
in_array() - Используйте
preg_match()для пользовательских шаблонов - Проверяйте загружаемые файлы: код ошибки, размер и тип MIME
- Сохраняйте введённые пользователем данные при повторном отображении форм с ошибками
Часто задаваемые вопросы
Урок «Методы проверки входных данных» бесплатный?
Да — полный текст урока «Методы проверки входных данных» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс PHP Academy, подпишись на CoddyKit PRO. Курс PHP Academy содержит 4 уроков всего.
Чему я научусь в уроке «Методы проверки входных данных»?
Проверяйте обязательные поля, типы и длину данных до их обработки Ты практикуешь PHP Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать PHP Academy?
Предыдущий опыт не требуется. PHP Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Методы проверки входных данных»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке PHP Academy?
Да. Каждый урок PHP Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- GET и POST: когда использовать каждый метод
- Чтение данных формы через суперглобальные переменные
- Методы проверки входных данных
- Очистка пользовательского ввода