GET или POST: что выбрать?
Сейчас наиболее часто используются всего два HTTP метода: GET и POST. Но оказалось, что даже среди этих двух «сосен» веб разработчики умудряются теряться. Этому есть объяснение: оба метода можно использовать для получения одинакового результата. Но нужно помнить, что необдуманное применение какого-либо из методов может привести к плачевным последствиям, среди которых большие нагрузки на канал и дыры в безопасности.

Чтобы этого избежать достаточно просто детальней разобраться в назначениях и различиях этих методов.
Если вникнуть в значение названий методов, уже многое прояснится. GET (с англ. получать), т.е. следует применять для запроса данных. POST (c англ. отправлять по почте) — применяем для отправки данных на сервер. Вроде все предельно просто и понятно. Но кто желает разрабатывать сайты чуть сложнее сайта визитки с одной формой обратной связи, лучше с вопросом познакомиться поближе.
Безопасные и небезопасные HTTP запросы
Спецификация HTTP 1.1 вводит два понятия: безопасный и небезопасный запрос, или если быть более точным, метод.
Безопасные — это методы, которые могут лишь запросить информацию. Они не могут изменить запрашиваемый ресурс, не могут привести к нежелательным результатам для пользователя, других лиц или сервера. Примерами безопасных есть запрос HTML кода веб страницы или изображения. К безопасным относятся методы HEAD и GET.
Заметка
В реальности умельцы конечно могут нанести вред и GET запросами. Например, зацикливаниями запросов.
Небезопасные запросы, как уже все догадались, могут потенциально привести к нехорошим последствиям, если ими воспользоваться повторно. Такие запросы могут менять содержимое ресурса, к которому обращаются. Примеры таких запросов: отправка сообщений, регистрация, онлайн платежи. К небезопасным относятся методы POST, PUT, DELETE.
Идемпотентнные (idempotent) методы
Идемпотентность — свойство методов, которые при многочисленном повторном обращении вернут один и тот же результат, кроме случаев когда информация устарела. Это значит, что при обращении к одному и тому же URL все пользователи будут видеть одну и туже веб страницу, изображение, видео и т.п. Таким свойством обладают GET, PUT, DELETE методы.
А теперь подробней о самих методах GET и POST: составим каждому короткое «резюме».
GET
- предназначен для получения данных с сервера;
- тело запроса пустое;
- обрабатываются на стороне сервера быстрее и с меньшим потреблением ресурсов сервера за счет пустого тела запроса;
- передача переменных происходит в адресной строке (так видит пользователь, технически данные предаются в строке запроса) и поэтому видна информация о переменных и их значениях (данные не защищены);
- способен передать небольшое количество данных на сервер: есть ограничения на длину URL, которое зависит от браузера, например, IE6 = 2Kb. На это число и рекомендуют ориентироваться разработчики Yahoo!;
- может передать только ASCII символы;
- такой запрос можно скопировать, сохранить (например, в закладках);
- запрос может кэшироваться (этим можно управлять);
- для дополнительного снижения нагрузки на канал и сервер доступны условные и частичные запросы;
- не разрывает HTTP соединение (при включенном на сервере режиме keepAlive).
POST
- предназначен для отправления данных на сервер;
- передача данных происходит в теле запроса;
- обработка на стороне сервера медленнее и «тяжелее», чем GET, потому что помимо заголовков нужно анализировать тело запроса;
- способен передать большие объемы данных;
- способен передать файлы;
- страницу, сгенерированную методом POST нельзя сохранить в закладки;
- разрывает HTTP соединение;
- для передачи даже очень малого объема информации большинством браузеров отправляет минимум два TCP пакета: заголовок, а потом тело запроса.
Оказывается не такие уж и похожие эти два метода. Применение того или иного должно быть обусловлено поставленной задачей, а никак не тем, что GET используется по умолчанию или с ним легче работать. GET, конечно, в большинстве случаев более выигрышный вариант, особенно при построении быстрых AJAX, но не стоит забывать о его недостатках. Для себя же сделал простую алгоритм-заметку по выбору метода:
Простой выбор между GET и POST
- если по логике будет происходить небезопасный запрос — использую POST;
- если идемпотентность нежелательна — использую POST;
- если требуется передать большой объем данных или файл — использую POST;
- в остальных случаях использую GET.
Это упрощенный вариант принятия решения, но для большинства случаев он сгодится.
Материалы
- Руководство по выбору между GET и POST
- Method Definitions
- XMLHttpRequest (XHR) Uses Multiple Packets for HTTP POST?
Какой запрос безопаснее get или post

Безопасные и небезопасные HTTP запросы
Изучив спецификацию HTTP 1.1, можно констатировать тот факт, что классификация разновидностей методов запросов насчитывает два типа: безопасный и небезопасный запрос. Теперь стоит разъяснить суть каждого из методов. Безопасными называются те запросы, которые не имеют никакого влияния на ресурс, они просто запрашивают и помогают считывать информацию. Примером такого запроса является отображение картинки — через ее адрес идет запрос на сервер в указанную директиву, где должен находится файл с картинкой. Такой тип запроса распространяется на методы HEAD и GET. digital агентство сайт.
На заметку
Безопасный метод — это еще не гарантия отсутствия проблем. Ущерб может нанести зацикливание определенного типа запроса, даже если он и безопасный.
Теперь обратимся к понятию небезопасного запроса. Такой метод предусматривает внесение изменений определенным данным на сайте. Наиболее вероятные проблемы возникают в том случае, когда запрос осуществляется повторно или без надобности. В качестве примера следует отметить такие процессы, как онлайн-регистрация, пересылание сообщения или веб-платежи. Пот такой тип запроса относят POST, PUT и DELETE методы.
Идемпотентные методы
Это сложное для восприятия и произношения понятие означает способность некоторых из методов предоставлять одни и те же данные при многочисленных запросах. Та ситуация, когда информация была обновлена, во внимание не берется. Изъясняясь более понятно, это тот случай, когда при запросе файла по одному и тому же адресу будет выводиться постоянно одна и та же информация (например, картинка). Такая способность присуща GET, PUT, DELETE методам. Узнав более подробнее про типы и методы запросов, возвращаемся к нашему главному вопросу — GET и POST. Разберем все характерные черты этих понятий, которые описывают принципиальные отличия одного от другого.
GET
- нужен для получения информации с сервера и не влияет на его содержимое;
- в теле запроса отсутствуют какие-либо элементы;
- для обработки на сервере не требует много времени или вспомогательных ресурсов;
- переменные проходят через адресную строку, что визуально доступно для пользователя, и в результате чего данные не имеют никакой защиты;
- существует предел объема информации для передачи. Ограничения выставляются главным образом браузерами. К примеру, IE шестой версии не позволяет использовать адрес, объем которого превышает 2 килобайта;
- используется единая система кодировки данных — система ASCII;
- вышеуказанная кодировка позволяет копировать свое содержимое или сохранять;
- запрос доступен для кеширования данных;
- существуют такие понятия, как условные и частичные запросы, посредством которых уменьшается нагрузка на информационный канал;
- работает по непрерывной связи HTTP (соответствует режиму keepAlive на сервере).
POST
- целью использования такого запроса является отправка данных, что может оказывать влияние на содержимое ресурса;
- тело запроса не является пустым, в нем размещены данные, которые нужно отправлять;
- проигрывает в скорости энергоемкости обработки запроса методу GET, так как тело запроса несет в себе основную информацию;
- имеет возможность нести в себе большой объем информации, откуда следует, что не исключается возможность передачи файлов на сервер;
- такая страница не может быть скопирована или сохранена;
- имеет способность разрывать соединение HTTP;
- процедура передачи информации для сервера осуществляется посредством двух пакетов TCP, в одном из которых содержится заголовок, а в другом — тело с информацией.
На этом будем завершать анализ методов. Теперь вы можете убедиться в том, что не совсем POST похож на GET. Поэтому при выборе метода в первую очередь следует проанализировать поставленные цели для ресурса, а затем, исходя из принятых решений, делать выбор. Да, стоит отметить, что по умолчанию работает метод GET.
Для удобности привожу шпаргалку, которая в большинстве случаев направит разработчика на верный путь и позволит принять верное решение:
- запрос попадает под классификацию небезопасного — POST;
- если нельзя оперировать свойством идемпотентности — POST;
- не получится избежать передачи большого количества информации — POST;
- для всех остальных случаев применяем GET в силу его быстродействия, экономичности ресурсов и простоте использования.
Хоть и шпаргалка не сможет помочь в специфических и сложных ситуациях, но для решения стандартных задач будет неоценимым помощником.
HTTP-запрос
Nette инкапсулирует HTTP-запрос в объекты с понятным API, обеспечивая при этом фильтр санации.
HTTP-запрос – это объект Nette\Http\Request, который вы получаете, передавая его с помощью инъекции зависимостей. В презентаторах просто вызывайте $httpRequest = $this->getHttpRequest() .
Важно то, что Nette при создании этого объекта очищает все входные параметры GET, POST и COOKIE, а также URL от управляющих символов и недопустимых последовательностей UTF-8. Поэтому вы можете спокойно продолжать работу с данными. Очищенные данные затем используются в презентаторах и формах.
Nette\Http\Request
Этот объект является неизменяемым. У него нет сеттеров, есть только один так называемый wither withUrl() , который не изменяет объект, а возвращает новый экземпляр с измененным значением.
withUrl( Nette\Http\UrlScript $url ) : Nette\Http\Request
Возвращает клон с другим URL.
getUrl() : Nette\Http\UrlScript
$url = $httpRequest->getUrl(); echo $url; // https://nette.org/en/documentation?action=edit echo $url->getHost(); // nette.org
Браузеры не отправляют фрагмент на сервер, поэтому $url->getFragment() вернет пустую строку.
getQuery( string $key=null ) : string|array|null
Возвращает параметры GET-запроса:
$all = $httpRequest->getQuery(); // массив всех URL параметров $id = $httpRequest->getQuery('id'); // возвращает GET-параметр 'id' (или null)
getPost( string $key=null ) : string|array|null
Возвращает параметры POST-запроса:
$all = $httpRequest->getPost(); // массив всех POST параметров $id = $httpRequest->getPost('id'); // возвращает POST-параметр 'id' (или null)
getFile( string|string[] $key ) : Nette\Http\FileUpload|array|null
$file = $httpRequest->getFile('avatar'); if ($file->hasFile()) < // был ли загружен какой-либо файл? $file->getUntrustedName(); // имя файла, отправленного пользователем $file->getSanitizedName(); // имя без опасных символов >
Укажите массив ключей для доступа к структуре поддерева.
// $file = $request->getFile(['my-form', 'details', 'avatar']);
Поскольку вы не можете доверять данным извне и поэтому не полагаетесь на форму структуры, этот метод безопаснее, чем $request->getFiles()[‘my-form’][‘details’][‘avatar’] который может потерпеть неудачу.
getFiles() : array
Возвращает дерево файлов выгрузки в нормализованной структуре, каждый лист которого является экземпляром Nette\Http\FileUpload:
$files = $httpRequest->getFiles();
getCookie( string $key ) : string|array|null
Возвращает cookie или null , если он не существует.
$sessId = $httpRequest->getCookie('sess_id');
getCookies() : array
Возвращает все файлы cookie:
$cookies = $httpRequest->getCookies();
getMethod() : string
Возвращает метод HTTP, с помощью которого был сделан запрос.
echo $httpRequest->getMethod(); // GET, POST, HEAD, PUT
isMethod( string $method ) : bool
Проверяет метод HTTP, с помощью которого был сделан запрос. Параметр не чувствителен к регистру.
if ($httpRequest->isMethod('GET')) // .
getHeader( string $header ) : ?string
Возвращает HTTP-заголовок или null , если он не существует. Параметр не чувствителен к регистру:
$userAgent = $httpRequest->getHeader('User-Agent');
getHeaders() : array
Возвращает все HTTP-заголовки в виде ассоциативного массива:
$headers = $httpRequest->getHeaders(); echo $headers['Content-Type'];
getReferer() : ?Nette\Http\UrlImmutable
С какого URL пришел пользователь? Остерегайтесь, это совсем не надежно.
isSecured() : bool
isSameSite() : bool
Запрос исходит из того же (под)домена и инициирован нажатием на ссылку? Для определения этого Nette использует cookie _nss (ранее nette-samesite ).
isAjax() : bool
getRemoteAddress() : ?string
getRemoteHost() : ?string
getBasicCredentials() : ?string
[$user, $password] = $httpRequest->getBasicCredentials();
getRawBody() : ?string
Возвращает тело HTTP-запроса:
$body = $httpRequest->getRawBody();
detectLanguage( array $langs ) : ?string
Определяет язык. В качестве параметра $lang мы передаем массив языков, которые поддерживает приложение, и он возвращает тот, который предпочитает браузер. Это не магия, метод просто использует заголовок Accept-Language . Если совпадение не достигнуто, возвращается null .
// Заголовок, отправляемый браузером: Accept-Language: cs,en-us;q=0.8,en;q=0.5,sl;q=0.3 $langs = ['hu', 'pl', 'en']; // языки, поддерживаемые в приложении echo $httpRequest->detectLanguage($langs); // en
RequestFactory
Объект текущего HTTP-запроса создается с помощью Nette\Http\RequestFactory. Если вы пишете приложение, которое не использует DI-контейнер, вы создаете запрос следующим образом:
$factory = new Nette\Http\RequestFactory; $httpRequest = $factory->fromGlobals();
RequestFactory может быть сконфигурирован перед вызовом fromGlobals() . Мы можем отключить всю санацию входных параметров от недопустимых последовательностей UTF-8 с помощью $factory->setBinary() . А также настроить прокси-сервер, что важно для правильного определения IP-адреса пользователя с помощью $factory->setProxy(. ) .
Очистить URL от символов, которые могут попасть в них из-за плохо реализованных систем комментариев на различных других сайтах, можно с помощью фильтров:
// удалите пробелы из пути $requestFactory->urlFilters['path']['%20'] = ''; // удалите точку, запятую или правую круглую скобку в конце URL-адреса $requestFactory->urlFilters['url']['['[.,)]$'] = ''; // очистить путь от дублирующихся слешей (фильтр по умолчанию) $requestFactory->urlFilters['path']['/'] = '/';
Загруженные файлы
Метод Nette\Http\Request::getFiles() возвращает дерево загруженных файлов в нормализованной структуре, каждый лист которого является экземпляром Nette\Http\FileUpload. Эти объекты инкапсулируют данные, представленные элементом элементом формы.
Структура отражает именование элементов в HTML. В простейшем примере это может быть один именованный элемент формы, представленный как:
В этом случае $request->getFiles() возвращает массив:
[ 'avatar' => /* FileUpload instance */ ]
Объект FileUpload создается, даже если пользователь не загрузил ни одного файла или загрузка не удалась. Метод hasFile() возвращает true, если файл был отправлен:
$request->getFile('avatar')->hasFile();
В случае ввода с использованием нотации массива для имени:
возвращаемое дерево выглядит следующим образом:
[ 'my-form' => [ 'details' => [ 'avatar' => /* FileUpload instance */ ], ], ]
Вы также можете создавать массивы файлов:
В таком случае структура выглядит следующим образом:
[ 'my-form' => [ 'details' => [ 'avatars' => [ 0 => /* FileUpload instance */, 1 => /* FileUpload instance */, 2 => /* FileUpload instance */, ], ], ], ]
Лучший способ доступа к индексу 1 вложенного массива следующий:
$file = $request->getFile(['my-form', 'details', 'avatars', 1]); if ($file instanceof FileUpload) < // . >
Поскольку вы не можете доверять данным извне и поэтому не полагаетесь на форму структуры, этот метод безопаснее, чем $request->getFiles()[‘my-form’][‘details’][‘avatars’][1] который может не сработать.
Обзор методов FileUpload
hasFile() : bool
Возвращает true , если пользователь загрузил файл.
isOk() : bool
Возвращает true , если файл был загружен успешно.
getError() : int
Возвращает код ошибки, связанный с загруженным файлом. Это может быть одна из констант UPLOAD_ERR_XXX. Если файл был загружен успешно, возвращается UPLOAD_ERR_OK .
move( string $dest )
Перемещает загруженный файл в новое место. Если файл назначения уже существует, он будет перезаписан.
$file->move('/path/to/files/name.ext');
getContents() : ?string
Возвращает содержимое загруженного файла. Если загрузка не была успешной, возвращается null .
getContentType() : ?string
Определяет MIME-тип содержимого загружаемого файла на основе его сигнатуры. Если загрузка не была успешной или определение не удалось, возвращается null .
Требуется расширение PHP fileinfo .
getUntrustedName() : string
Возвращает исходное имя файла, переданное браузером.
Не доверяйте значению, возвращаемому этим методом. Клиент может отправить вредоносное имя файла с намерением испортить или взломать ваше приложение.
getSanitizedName() : string
Возвращает санированное имя файла. Оно содержит только символы ASCII [a-zA-Z0-9.-] . Если имя не содержит таких символов, возвращается ‘unknown’. Если файл является изображением JPEG, PNG, GIF или WebP, возвращается правильное расширение файла.
getUntrustedFullPath() : string
Возвращает исходный полный путь, указанный браузером во время загрузки каталога. Полный путь доступен только в PHP 8.1 и выше. В предыдущих версиях этот метод возвращает недоверенное имя файла.
Не доверяйте значению, возвращаемому этим методом. Клиент может отправить вредоносное имя файла с намерением испортить или взломать ваше приложение.
getSize() : int
Возвращает размер загруженного файла. Если загрузка не была успешной, возвращается 0 .
getTemporaryFile() : string
Возвращает путь к временному местоположению загруженного файла. Если загрузка не была успешной, возвращается » .
isImage() : bool
Возвращает true , если загруженный файл является изображением JPEG, PNG, GIF или WebP. Обнаружение основано на его сигнатуре. Целостность всего файла не проверяется. Вы можете узнать, не повреждено ли изображение, например, попытавшись загрузить его.
Требуется расширение PHP fileinfo .
getImageSize() : ?array
Возвращает пару [width, height] с размерами загруженного изображения. Если загрузка не была успешной или это не действительное изображение, возвращается null .
toImage() : Nette\Utils\Image
Загружает изображение как объект Image. Если загрузка не была успешной или изображение не является действительным, выбрасывается исключение Nette\Utils\ImageException .
Вы нашли проблему на этой странице?
- Показать на GitHub (затем нажмите E для редактирования)
- Открытый предварительный просмотр
- Сообщить о проблеме с этой страницей на GitHub
- Документация
- Nette HTTP
- HTTP-запрос
Чем отличаются HTTP-методы GET и POST
HTTP-методы GET и POST — самые распространённые способы отправить или получить данные с сервера. Но в разных случаях оба метода могут быть небезопасными или неудобными в использовании. В этой заметке рассмотрим, какой метод когда использовать.
GET — метод для чтения данных с сайта. Например, для доступа к указанной странице. Он говорит серверу, что клиент хочет прочитать указанный документ. На практике этот метод используется чаще всего, например, в интернет-магазинах на странице каталога. Фильтры, которые выбирает пользователь, передаются через метод GET .
:authority: htmlacademy.ru :method: GET :path: /tutorial/php/http-header
POST — метод для отправки данных на сайт. Чаще всего с помощью метода POST передаются формы.
URL-адрес запроса: https://htmlacademy.ru/ Метод запроса: POST Код состояния: 200
Формат запроса
Протокол HTTP очень прост и состоит, по сути, из двух частей — заголовков и тела запроса или ответа.
Тело запроса — это информация, которую передал браузер при запросе страницы. Но тело запроса присутствует только если браузер запросил страницу методом POST . Например, если отправлена форма, то телом запроса будет содержание формы.

Пример GET-запроса. Информация передаётся прямо в заголовке.
GET /blog/?name1=value1&name2=value2 HTTP/1.1 Host: htmlacademy.ru
Пример POST-запроса. Информация передаётся в теле запроса:
POST /blog/ HTTP/1.1 Host: htmlacademy.ru name1=value1&name2=value2
GET для безопасных действий, POST для опасных
Говоря совсем просто, GET-запросы лучше не использовать с приватной информацией. Вот почему:
- Они кешируются. Это значит, что логин и пароль, переданные через GET-запрос, могут остаться в интернете навсегда, например, в веб-архиве или кеше Гугла.
- Остаются в истории браузера. Чтобы узнать, какие данные отправлялись, достаточно нажать Ctrl+H.
- Сохраняются в закладках и пересылаются. Можно не обратить внимания и опубликовать в соцсетях или отправить ссылку с приватной информацией в GET-запросе.
- Сохраняются в логах сервера. Например, нельзя отправлять данные банковских карт через GET-запрос, так как это создаёт риски для пользователей.
Таким образом, любые важные данные — логины, пароли, данные карты, персональные данные — лучше передавать с помощью метода POST . Также метод POST поддерживает тип кодирования данных multipart/form-data , что позволяет передавать файлы.
Ещё раз коротко
GET
- Фильтры в интернет-магазинах
- Передача параметров через ссылку
- Другие безопасные запросы
POST
- Любые формы с паролями или банковскими картами
- Формы заявок с персональными данными
- Отправка файлов
Полезные материалы
- Тренажёр по работе с методом GET
- Протокол HTTP
- Где смотреть запросы. Вкладка Network в Chrome DevTools
- Механизм безопасной переадресации после POST-запроса (англ.)
«Доктайп» — журнал о фронтенде. Читайте, слушайте и учитесь с нами.
Читать дальше

Как работает протокол HTTP
HTTP был разработан в 1990-х годах для создания первого интерактивного текстового веб-браузера. За эти годы протокол менялся и совершенствовался, становился более гибким и постепенно превратился в современный интернет. В статье рассмотрим принцип работы протокола и что важно знать о нём разработчику.
- 8 февраля 2023

10 популярных функций в MYSQL, которые вам нужно знать
Без лишних слов принесли вам некоторые популярные функции MySQL, без которых вы точно не обойдётесь в работе.
- 17 января 2023

Подключение файлов в PHP. Метод require()
Способность вызывать сценарий из отдельного файла по его имени называется в PHP подключением файлов. Подключают PHP-сценарии, любые текстовые файлы или HTML-страницы.
- 21 ноября 2022

Массивы в PHP
Массив — это ещё один тип данных, вроде числа или строки. Главное отличие массива от остальных типов данных заключается в его способности хранить в переменной больше одного значения. В предыдущих примерах имя переменной всегда ассоциировалось только с одним значением:
- $name = «Иннокентий»
- $age = 42
А если мы хотим узнать не только пол, имя и возраст пользователя, но и, допустим, любимые сериалы? Очень непросто назвать один самый любимый сериал, а вот вспомнить несколько — намного легче. Сохранение в переменную-массив нескольких значений выглядит так:
$fav_shows = ["game of thrones", "american horror story", "walking dead"];
В этом примере мы сохранили в переменной $fav_shows сразу три значения. Но сохранить эти данные — это только половина дела. Как с ними потом работать? Уже знакомый вам способ вывода переменной на экран не будет работать с массивами:
Так увидеть список любимых сериалов не получится. Дело в том, что массив — это не обычная переменная. Массив хранит не простые типы, вроде текста или чисел (их ещё называют «скалярными типами»), а более сложную структуру данных, поэтому здесь нужен особый подход.
Внутри массива у каждого значения есть адрес, по которому к нему можно обратиться. Такой адрес называется индексом. Индекс — это просто порядковый номер значения внутри массива. Индексация начинается с нуля, так что первый элемент получает индекс — 0 , второй — 1 , и так далее.
Чтобы получить определенный элемент массива, необходимо знать его индекс (ключ). Напечатаем названия всех сериалов из массива через запятую:
Теперь можно дать определение массива: Массив — это совокупность множества элементов вида «ключ: значение».
Массивы позволяют перезаписывать существующие значения и добавлять новые. Добавить новое значение в массив можно так:
$fav_shows[] = "the big bang theory";
Новый элемент автоматически получит индекс равный максимальному индексу из существующих + 1. «Теория большого взрыва» сохранится в массиве под индексом 3 .
Если нам перестал нравиться один из сериалов, так как новый сезон оказался очень плох или появился новый фаворит, значения в массиве можно заменить. Чтобы вычеркнуть старое значение и заменить его новым, нужно присвоить новое значение любому из существующих в массиве индексов:
$fav_shows[4] = "fargo";
Для полного удаления (без замены на другое) значения по его индексу существует функция unset :
unset($fav_shows[4]);
- 10 ноября 2022

Синтаксис PHP
Разберёмся, из чего состоит любой язык программирования.
У каждого языка есть правила и конструкции, следуя которым мы выражаем мысли и делаем их понятными для другого человека. В программировании всё точно так же. Но вместо человеческого языка мы используем язык программирования PHP, а в роли нашего собеседника выступает PHP-интерпретатор. Поэтому, чтобы выразить свою мысль, мы должны сделать её понятной для интерпретатора.
- 27 октября 2022
Массивы $_POST и $_GET в PHP. Обработка форм
Формы — это часть языка HTML. Формы нужны для передачи данных от клиента на сервер. Чаще всего формы используются для регистрации пользователей, заполнения анкет, оформления заказа в интернет магазине, и так далее.
Через формы можно отправлять как простую текстовую информацию, так и файлы.
Большую часть времени программирования на PHP вы будете так или иначе работать с формами и данными из них.
HTML описывает то, из каких элементов состоит форма, и как она выглядит. Но без принимающей стороны, то есть сервера, который принимает эти данные и обрабатывает их нужным образом, создавать формы нет никакого смысла.
PHP содержит множество средств для работы с формами. Это позволяет очень просто решать типичные задачи, которые часто возникают в веб-программировании:
- Регистрация и аутентификация пользователя;
- Отправка комментариев на форумах и социальных сетях;
- Оформление заказов.
Практически любой современный сайт содержит как минимум несколько разных HTML-форм.
- 20 октября 2022

Учебник по PHP
- Знакомство с языком
- Что такое PHP
- Синтаксис PHP
- Массивы
- Циклы
- Функции
- Шаблонизация и подключение файлов
- Подключение файлов
- Шаблонизация
- Протокол HTTP и формы
- Протокол HTTP
- Формы
- Уязвимости
- Идентификация пользователя на сайте
- Аутентификация пользователя
- Базы данных
- База данных
- SQL
- MySQL в PHP
- Безопасность в MySQL
- Объекты и использование библиотек
- Объекты
- Библиотеки
- Composer
- 10 сентября 2022

Протокол HTTP и работа с заголовками
Весь современный веб построен на модели взаимодействия клиента и сервера. Как она работает:
- браузер пользователя (клиент) отправляет на сервер запрос с адресом сайта (URL);
- сервер получает запрос и отдаёт клиенту запрошенный контент.
Для реализации процесса используется универсальный протокол HTTP.
- 10 сентября 2022

Защита от SQL-инъекций
Внедрение SQL-кода (SQL инъекция) — один из распространённых способов взлома сайтов, работающих с базами данных. Способ основан на внедрении в запрос произвольного SQL-кода. Внедрение SQL позволяет хакеру выполнить произвольный запрос к базе данных (прочитать содержимое любых таблиц, удалить, изменить или добавить данные).
Атака этого типа возможна, когда недостаточно фильтруются входные данные при использовании в SQL-запросах.
- 10 сентября 2022

Объекты и классы в PHP
Объекты в PHP — это просто ещё один тип данных. Объект позволяет хранить в переменной набор из свойств и их значений, а также встроенные функции. Это делает объекты похожими по своей структуре на ассоциативные массивы. Но отличие от массивов всё-таки есть, и при этом достаточно важное — объекты могут иметь внутреннее состояние.
- 10 сентября 2022