popov . dev

Главная

Библиотека

Статьи

Использование ме...

Использование метода POST в форме PHP

Данные POST передаются через форму и "публикуются" на веб-сервере в виде данных формы. Данные POST кодируются так же, как и данные GET, но обычно не видны пользователю в стандартных браузерах.

В большинстве форм используется метод post, поскольку он "скрывает" данные формы от пользователя и не загромождает URL-адрес в адресной строке. Обратите внимание, что методы GET и POST одинаково безопасны.

Так же легко, как пользователь может манипулировать данными GET в URL, то же самое можно сделать и с данными POST. Вы всегда должны предполагать, что пользователь может отправлять любую форму и данные из формы, которые он хочет, и обрабатывать данные соответствующим образом. Не доверяйте пользовательскому вводу, будь то из GET или из POST!

Доступ к данным POST осуществляется с помощью массива $_POST в PHP.

<?php
   echo("Имя: " . $_POST['name'] . "<br />\\n");
   echo("Фамилия: " . $_POST['surname'] . "<br />\\n");
?>
<form action="form.php" method="post">
    <p>Имя: <input type="text" name="name" /></p>
    <p>Фамилия: <input type="text" name="surname" /></p>
    <input type="submit" name="submit" value="Отправить" />
</form>

Использование isset()

Вы можете использовать функцию isset() для любой переменной, чтобы определить, была ли она установлена или нет. Вы можете использовать эту функцию для массива $_POST, чтобы определить, была ли переменная опубликована или нет. Это часто применяется к значению кнопки отправки, но может быть применено к любой переменной.

<?php
    if(isset($_POST['submit']) 
    {
        echo("Имя: " . $_POST['name'] . "<br />\\n");
        echo("Фамилия: " . $_POST['surname'] . "<br />\\n");
    }
?>
<form action="form.php" method="post">
    <p>Имя: <input type="text" name="name" /></p>
    <p>Фамилия: <input type="text" name="surname" /></p>
    <input type="submit" name="submit" value="Отправить" />
</form>

Приведенный выше код отобразит отправленные значения только в том случае, если была нажата кнопка Отправить.

Могу ли я использовать GET и POST на одной странице?

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

https://mysite.ru/form.php?lang=russian пример передачи в форму GET запроса совместно с POST

<?php
    if(isset($_POST['submit']) {
        if($_GET['lang'] == "russian") {
           echo("Имя: " . $_POST['name'] . "<br />\\n");
           echo("Фамилия: " . $_POST['surname'] . "<br />\\n");
        } else if($_GET['lang'] == "english") {
           echo("First name: " . $_POST['name'] . "<br />\\n");
           echo("Last name: " . $_POST['surname'] . "<br />\\n");
    }
?>
<form method="post">
    <p>First name: <input type="text" name="firstname" /></p>
    <p>Last name: <input type="text" name="firstname" /></p>
    <input type="submit" name="submit" value="Submit" />
</form>

Вместо использования массивов GET и POST вы также можете использовать массив $_REQUEST, который будет содержать объединенное содержимое данных. Если переменные GET и POST имеют одинаковые имена, приоритет будет отдан POST. Рекомендуется не делать этого без крайней необходимости, потому что это может привести к путанице, и лучше всего четко представлять, откуда поступают данные.

Еще одна вещь, на которую следует обратить внимание: action в форме теперь отсутствует. Технически, это недопустимый HTML-код. Однако, если не вводить action, браузеры будут считать, что форма отправляет сообщение сама себе. Это важно, потому что это также сохранит строку запроса при отправке формы (часть ?lang=russian). Вы можете использовать серверные переменные, такие как $_SERVER['PHP_SELF'] и $_SERVER['QUERY_STRING'], для создания значения действия.

Комментарии

Для того чтобы оставить свое мнение, необходимо зарегистрироваться на сайте