Какой запрос безопаснее get или post
Перейти к содержимому

Какой запрос безопаснее get или post

  • автор:

GET или POST: что выбрать?

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

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 — GET и POST, опишет их основные отличия и поможет сделать правильный выбор при создании нового ресурса. В последнее время в сложившейся практике разработки сайтов наибольшую популярность получили два типа HTTP запросов: GET и POST. Казалось бы ничего сложного в этих двух понятиях нет, но начинающие и неопытные веб-разработчики очень часто допускают непростительные ошибки при выборе определенного метода. Главным образом это происходит по той причине, что эти 2 разные пути могут привести к одному и тому же результату. Ценой неправильного выбора типа запроса может быть угроза безопасности ресурса или информационная перегрузка сервера. Итак, чтобы не допускать принятие неправильных решений, следует подробнее разобрать суть обоих методов. Это позволит докопаться до истины и вывести веб-разработчика на верный путь. Очень действенный метод восприятия информации — это ассоциативное мышление, поэтому предлагаю придумать для каждого понятия ассоциацию и связывать функциональные возможности с этим предметом. Обратимся к названиям методов, а точнее к их переводу на русский язык. К примеру, 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
    1. Документация
    2. Nette HTTP
    3. 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

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

    • 8 февраля 2023

    10 популярных функций в MYSQL, которые вам нужно знать

    10 популярных функций в MYSQL, которые вам нужно знать

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

    • 17 января 2023

    Подключение файлов в PHP. Метод require()

    Подключение файлов в PHP. Метод require()

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

    • 21 ноября 2022

    Массивы в PHP

    Массивы в 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, а в роли нашего собеседника выступает PHP-интерпретатор. Поэтому, чтобы выразить свою мысль, мы должны сделать её понятной для интерпретатора.

    • 27 октября 2022

    Массивы $_POST и $_GET в PHP. Обработка форм

    Формы — это часть языка HTML. Формы нужны для передачи данных от клиента на сервер. Чаще всего формы используются для регистрации пользователей, заполнения анкет, оформления заказа в интернет магазине, и так далее.

    Через формы можно отправлять как простую текстовую информацию, так и файлы.

    Большую часть времени программирования на PHP вы будете так или иначе работать с формами и данными из них.

    HTML описывает то, из каких элементов состоит форма, и как она выглядит. Но без принимающей стороны, то есть сервера, который принимает эти данные и обрабатывает их нужным образом, создавать формы нет никакого смысла.

    PHP содержит множество средств для работы с формами. Это позволяет очень просто решать типичные задачи, которые часто возникают в веб-программировании:

    • Регистрация и аутентификация пользователя;
    • Отправка комментариев на форумах и социальных сетях;
    • Оформление заказов.

    Практически любой современный сайт содержит как минимум несколько разных HTML-форм.

    • 20 октября 2022

    Учебник по PHP

    Учебник по PHP

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

    Протокол HTTP и работа с заголовками

    Протокол HTTP и работа с заголовками

    Весь современный веб построен на модели взаимодействия клиента и сервера. Как она работает:

    • браузер пользователя (клиент) отправляет на сервер запрос с адресом сайта (URL);
    • сервер получает запрос и отдаёт клиенту запрошенный контент.

    Для реализации процесса используется универсальный протокол HTTP.

    • 10 сентября 2022

    Защита от SQL-инъекций

    Защита от SQL-инъекций

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

    Атака этого типа возможна, когда недостаточно фильтруются входные данные при использовании в SQL-запросах.

    • 10 сентября 2022

    Объекты и классы в PHP

    Объекты и классы в PHP

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

    • 10 сентября 2022
  • Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *