Передача переменных в PHP. Методы GET и POST

Logo
Передача переменных в PHP. Методы GET и POST

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

Передача переменных при помощи метода GET

Данный метод передачи переменных применяется в PHP для передачи переменных в файл при помощи адресной строки. То есть переменные передаются сразу через адресную строку браузера. Примером может быть, например, ссылка на статью в WordPress без использования ЧПУ (SEF), которая имеет примерно следующий вид:

http://dmitriydenisov.com/?p=315

То есть в данном случае передается переменная $p со значением 315. Теперь давайте более подробно на примере рассмотрим работу метод GET. Пускай нам нужно передать в файл три переменных $a, $b и $c методом GET и вывести их сумму на экран. Для этого можно использовать следующий код.

$a = $_GET['a'];
$b = $_GET['b'];
$c = $_GET['c'];
$summa = $a + $b + $c;
echo "Сумма $a + $b + $c = $summa";

Поскольку все переменные перед передачей будут помещаться в глобальный массив GET (Массивы в PHP), то мы первым делом присваиваем нашим переменным значения соответствующих элементов массива GET. Делаем это в самом начале во избежание разнообразных ошибок при передаче переменных. Далее для демонстрации работы прописываем произвольную формулу и выводим результат на экран.

Для проверки работы метода GET достаточно просто добавить к ссылке на файл знак вопроса «?» и через амперсанд «&» перечислить переменные с их значениями. Пускай у нас есть файл get.php, который лежит в корне сайта http://dmitriydenisov.com. Для того чтобы передать в файл переменные, достаточно прописать в адресной строке следующее.

http://dmitriydenisov.com/get.php?a=1&b=2&c=3

Как видно с примера, сначала мы добавляем знак вопроса сразу после названия файла. Далее прописываем переменную и через равно указываем ее значение. После этого через амперсанд аналогичным образом перечисляем другие переменные. Теперь при переходе по этой ссылке нам выведется сумма переменных $a, $b и $c.

Данный способ очень простой и не требует создания дополнительных файлов. Все необходимые данные поступают прямо через адресную строку браузера.

Ну а теперь давайте перейдем ко второму способу передачи переменных в PHP – методу POST.

Передача переменных в PHP при помощи метода POST

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

Код первого файла с формой для отправки данных. Дадим ему название post-1.php

<!--Форма -->
<form action="post-2.php" method="post" name="form1" target="_blank">
<!--Текстовые поля -->
<p><input name="name" type="text" size="20"></p>
<p><input name="lastname" type="text" size="20"></p>
<!--Кнопка -->
<p><input name="submit" type="submit" value="Передать"></p>
</form>

Форма:

  • action – указываем файл, в который будут передаваться переменные.
  • method – метод передачи переменных. В нашем случае это метод POST.
  • name – название формы. Одновременно в файл будет передана переменная с таким именем.

Текстовые поля:

  • name – имена переменных. В нашем случае это имя и фамилия (переменные name и lastname).
  • type – тип поля. В нашем случае это текстовое поле.

Кнопка:

  • name – имя кнопки и переменной, которая будет передана вместе с другими переменными.
  • type – тип кнопки. В нашем случае это кнопка для отправки данных.
  • value – текст на кнопке.

Код второго файла, который будет служить приемником переменных. Назовем его post-2.php

$name = $_POST[name];
$lastname = $_POST[lastname];
echo "Значения переменных, переданных методом POST - $name и $lastname";

Как и с методом GET, мы первым делом присваиваем переменным значения соответствующих элементов глобального массива POST. Далее для наглядности выводим эти переменные на экран при помощи оператора вывода echo.

Теперь при загрузке первого файла у нас загрузится форма. После введения данных жмем по кнопке «Отправить», в результате чего в новой вкладке у нас откроется страница со вторым файлом, на которой выведутся значения, прописанные в форме на предыдущей странице. То есть второму файлу будут переданы значения переменных с первого файла.

На этом данная статья про передачу переменных в PHP подошла к концу. Если вы не хотите пропустить появления других статей на блоге, рекомендую подписаться на новостную рассылку любым удобным способом в пункте «Подписка» либо воспользоваться формой ниже.

На этом все. Удачи вам и успеха в освоении основ PHP.

Обнаружили ошибку? Выделите ее и нажмите Ctrl+Enter

Комментарии 15

  • Сергей

    СПАСИБО!!!

  • Георгий

    спасибо за уроки, давно искал такой сайт

  • Дмитрий

    Это вам спасибо за отзыв! Буду рад видеть вас постоянным читателем моего блога.

  • Марина

    Спасибо, это самые понятные уроки, какие доводилось найти. Очень просто и понятно!

  • Дмитрий

    Спасибо за комментарий! Буду очень признателен, если воспользуетесь любой из социальных кнопочек, размещенных сразу под статьей.

  • Михаил

    Дмитрий, но у меня не проходит передача методом через $_GET. После прохода по ссылке в приемный массив выдается
    Notice: Undefined index: fotki in C:\wamp\www\Poligon\rewrite.php on line 6.

    При нажатии ссылки, те. переходе в файл 'rewrite.php выдается текст ошибки.
    В чем тут дело? Я экспериментировал на локалхосте, WAMPSERVER, Апач 2.2.11, PHP 5.3.0
    Может разберетесь, в чем тут дело?
    Спасибо.

  • Михаил

    При передаче через ссылку тоже не работает, после нажатия на ссылку выдает ошибку:
    Notice: Undefined variable: p in C:\wamp\www\Poligon\rewrite.php on line 3

  • Дмитрий

    Здравствуйте, Михаил. У меня отключен код в комментариях, поэтому прочитать тот большой кусок кода я не смог. Если есть желание, напишите мне в "Контакты" и к письму приложите файлы. Если будет свободное время, то постараюсь помочь. Сейчас очень сильно загружен, поэтому свободного времени совсем нет. Скажу только, что все приведенные в статье примеры работают. Весь код, опубликованный на сайте, многократно проверялся мною, поэтому проблем возникать не должно. Если есть проблемы, то причина скорее всего кроется в настройке рабочей среды. Видимо, где-то допущена ошибка при настройке.

  • Игорь

    А как объеденить файлы post-1.php и post-2.php в один файл?

  • Дмитрий

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

  • Елена

    Спасибо, все достаточно понятно! Хороший сайт!)

  • Никита

    Игорь, обеденить можно так:

    if (isset($_POST['submit']))
    {
        /*тут нужно вставить второй файл*/
    }
    else
    {
        /*тут нужно вставить первый файл*/
    }

  • Krarby

    Норм)

  • Рафаэль

    здравствуйте! Прочитал статью и такой вопрос появился: а можно ли передать данные из формы методом get? Т.е. например есть страница с формой. Но могу ли я не заполнять саму форму, а в адресной строке браузера написать код, который заключал бы в себе все переменные и значения которые должны вводится в форму и передать их на сервер?

  • Дмитрий

    Здравствуйте, Рафаэль. Вы можете передавать данные на сервер через адресную строку без заполнения формы или при полном ее отсутствии. Грубо говоря, в случае метода GET форма нужна исключительно для удобства генерации запроса (ссылки с параметрами). Вы можете генерировать ссылки любым другим способом и все будет работать.

Оставить комментарий

отменить ответ