0Pricing
PHP Academy · Урок

GET и POST: когда использовать каждый метод

Разберитесь в различиях между HTTP GET и POST в PHP

«GET и POST: когда использовать каждый метод» — бесплатный урок PHP Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения PHP Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс PHP Academy содержит 4 уроков всего.

Методы веб-запросов в PHP

Когда браузер отправляет форму HTML, он использует метод GET или POST веб-запроса. PHP получает отправленные данные через суперглобальные массивы:

  • $_GET — данные, добавленные к адресу
  • $_POST — данные в теле запроса

Метод GET

GET добавляет данные формы к адресу в виде параметров строки запроса:

<!-- HTML form -->
<form method="GET" action="search.php">
    <input name="query" type="text">
    <button type="submit">Search</button>
</form>

<!-- URL becomes: search.php?query=php+tutorial -->

<?php
$q = $_GET['query'] ?? '';
echo 'You searched for: ' . htmlspecialchars($q);

Метод POST

POST отправляет данные в теле веб-запроса — они не видны в адресе:

<!-- HTML form -->
<form method="POST" action="login.php">
    <input name="email" type="email">
    <input name="password" type="password">
    <button type="submit">Log In</button>
</form>

<?php
$email    = $_POST['email']    ?? '';
$password = $_POST['password'] ?? '';

Когда использовать GET

Используйте GET, когда:

  • запрос идемпотентен (не имеет побочных эффектов)
  • данные могут отображаться в адресе — поисковые запросы, фильтры, нумерация страниц
  • нужны URL, которые можно добавлять в закладки или которыми можно делиться
  • данные не являются конфиденциальными

Когда использовать POST

Используйте POST, когда:

  • запрос изменяет состояние сервера (создаёт, обновляет или удаляет данные)
  • данные являются конфиденциальными (пароли, личная информация)
  • отправляется большой объём данных (файлы, длинный текст)
  • не нужно, чтобы браузеры или промежуточные серверы кэшировали данные

Ограничения длины GET

Для GET-запросов действуют ограничения длины адреса (на практике обычно около 2000 символов). Для POST практического ограничения нет, кроме заданного конфигурацией сервера:

<?php
// php.ini settings for POST limits:
// post_max_size = 8M   (total POST body size)
// upload_max_filesize = 2M

// Check current limits at runtime:
echo ini_get('post_max_size');        // 8M
echo ini_get('upload_max_filesize');  // 2M

Суперглобальный массив запроса

$_REQUEST объединяет $_GET, $_POST и $_COOKIE. Это удобно, но источник данных становится менее очевидным:

<?php
// Works for both GET and POST but is ambiguous
$name = $_REQUEST['name'] ?? '';

// Better: be explicit about the expected method
$name = match($_SERVER['REQUEST_METHOD']) {
    'GET'  => $_GET['name']  ?? '',
    'POST' => $_POST['name'] ?? '',
    default => '',
};

Проверка метода запроса

Всегда проверяйте метод запроса перед обработкой данных формы:

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $name = trim($_POST['name'] ?? '');
    if (!empty($name)) {
        echo 'Hello, ' . htmlspecialchars($name);
    }
} else {
    // Show empty form
}

Защищённое соединение и безопасность данных

Даже при использовании POST данные видны в открытом виде, если не используется защищённое соединение. Основные правила безопасности:

  • Всегда используйте защищённое соединение в рабочей среде
  • Никогда не отправляйте пароли через GET
  • POST по незащищённому протоколу всё равно небезопасен — защищённое соединение шифрует и тело запроса

Перенаправление после POST (шаблон PRG)

После успешного POST перенаправляйте пользователя на GET-запрос, чтобы предотвратить повторную отправку при обновлении страницы:

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Process the form...
    $id = saveToDatabase($_POST);
    
    // Post-Redirect-Get (PRG) pattern
    header('Location: /success.php?id=' . $id);
    exit;
}

Многочастные формы для загрузки файлов

Для загрузки файлов форма должна использовать enctype="multipart/form-data" вместе с POST:

<!-- Required for file uploads -->
<form method="POST" action="upload.php"
      enctype="multipart/form-data">
    <input type="file" name="avatar">
    <button type="submit">Upload</button>
</form>

<?php
$file = $_FILES['avatar'];
echo $file['name'];  // original filename

Быстрая проверка

Какой метод веб-запроса следует использовать при отправке формы входа с именем пользователя и паролем?

Повторение: GET и POST

Основные различия:

  • GET — в адресе, можно добавить в закладки, без побочных эффектов, ограниченный размер
  • POST — в теле запроса, подходит для конфиденциальных данных, без ограничения длины адреса
  • Всегда используйте защищённое соединение для защиты данных GET и POST
  • Проверяйте $_SERVER['REQUEST_METHOD'] перед обработкой
  • Применяйте шаблон PRG, чтобы предотвратить повторную отправку POST

Часто задаваемые вопросы

Урок «GET и POST: когда использовать каждый метод» бесплатный?

Да — полный текст урока «GET и POST: когда использовать каждый метод» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс PHP Academy, подпишись на CoddyKit PRO. Курс PHP Academy содержит 4 уроков всего.

Чему я научусь в уроке «GET и POST: когда использовать каждый метод»?

Разберитесь в различиях между HTTP GET и POST в PHP Ты практикуешь PHP Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать PHP Academy?

Предыдущий опыт не требуется. PHP Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «GET и POST: когда использовать каждый метод»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке PHP Academy?

Да. Каждый урок PHP Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. GET и POST: когда использовать каждый метод
  2. Чтение данных формы через суперглобальные переменные
  3. Методы проверки входных данных
  4. Очистка пользовательского ввода
← Назад к PHP Academy