PHP PHP  ·  20 вопросов  ·  ~55 мин  ·  ⏱ Таймер 55:00  ·  Лёгкий  · 

Формы и данные HTTP-запроса

Пользовательский ввод редко приходит в том виде, в каком его ожидает программа. Тест проверяет чтение GET и POST, различие отсутствующего и пустого значения, обработку заголовков и порядок валидации с нормализацией.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. Для каждого примера отделяйте получение данных от их проверки и преобразования. Таймер — 55 минут.
Вопрос 1 из 20
Почему для удаления записи не стоит полагаться на GET-запрос вида /delete?id=7?
PHP
if ($_SERVER['REQUEST_METHOD'] === 'GET' && isset($_GET['delete'])) {
    $repository->delete((int) $_GET['delete']);
}
Вопрос 2 из 20
Что содержит $_POST при JSON-теле application/json?
PHP
$payload = json_decode(
    file_get_contents('php://input'),
    true,
    512,
    JSON_THROW_ON_ERROR
);
Вопрос 3 из 20
Какой результат может получить поле name="tags[]" с тремя значениями формы?
PHP
$query = 'tags[]=php&tags[]=sql&tags[]=linux';
parse_str($query, $form);
var_export($form['tags']);
Вопрос 4 из 20
Почему использование $_REQUEST затрудняет проверку происхождения данных?
Вопрос 5 из 20
Что выведет код при запросе POST /save?id=4 с телом name=Ann?
PHP
echo $_GET['id'], ':', $_POST['name'];
Вопрос 6 из 20
Почему header("Location: /login") лучше сопровождать exit?
PHP
if (!$user) {
    header('Location: /login');
}

$orders->delete($orderId);
Вопрос 7 из 20
Что вызывает предупреждение headers already sent?
PHP
echo 'Начало ответа';
header('X-Request-Id: 42');
Вопрос 8 из 20
Какой заголовок нужен для JSON-ответа в UTF-8?
Вопрос 9 из 20
Как задать код ответа 422 без ручной строки протокола?
Вопрос 10 из 20
Как защититься от внедрения перевода строки в собственный заголовок с пользовательским значением?
Вопрос 11 из 20
Почему filter_input(..., FILTER_VALIDATE_INT) нужно проверять строго?
PHP
$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
if ($id === false || $id === null) {
    http_response_code(400);
}
Вопрос 12 из 20
Поле age прошло FILTER_VALIDATE_INT. Что ещё нужно проверить?
PHP
$age = filter_input(INPUT_POST, 'age', FILTER_VALIDATE_INT);
if ($age === false || $age === null || $age < 14 || $age > 120) {
    throw new InvalidArgumentException('Недопустимый возраст');
}
Вопрос 13 из 20
Как проверить обязательное текстовое поле, где строка "0" считается допустимой?
Вопрос 14 из 20
Почему клиентская проверка required не отменяет серверную?
Вопрос 15 из 20
Что лучше сделать при неизвестном поле role в публичной форме регистрации?
Вопрос 16 из 20
Почему trim пароля перед проверкой может быть ошибкой?
PHP
$rawPassword = (string) ($_POST['password'] ?? '');
$password = trim($rawPassword);
$valid = password_verify($password, $storedHash);
Вопрос 17 из 20
Как лучше обрабатывать адрес электронной почты перед сравнением?
PHP
$email = (string) ($_POST['email'] ?? '');
$normalized = mb_strtolower(trim($email), 'UTF-8');
// Такая нормализация должна быть частью заранее выбранного правила приложения.
Вопрос 18 из 20
Что произойдёт после (int) "00123"?
Вопрос 19 из 20
Нужно сравнивать пользовательские метки без учёта регистра в UTF-8. Почему strtolower недостаточно?
Вопрос 20 из 20
В какой момент разумнее нормализовать телефон для поиска?

Ответьте на все 20 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу