16.01.2018   420
GET-запросы в PHP: взаимодействуем с пользователем

Взаимодействие с пользователем: GET-запросы

Итак, пришло время нам начать взаимодействовать с пользователем. Как мы говорили ранее, PHP работает на сервере. Отсюда следует вопрос, а как же нам из браузера начать с ним взаимодействовать? Например, заполнить форму логина на сайте и отправить данные на сервер, чтобы наш код с ним что-нибудь сделал. Именно об этом мы и поговорим в этом уроке.

Итак, давайте удалим все наши файлы в проекте и создадим новый пустой файл с именем index.php. Запишем в него следующий код:

<?php

echo 'Hello world!';

Давайте выполним этот скрипт, открыв в браузере адрес:
http://myproject.loc/index.php

Как мы помним из этого урока, мы отправляем запрос веб-серверу, он понимает, что мы запрашиваем PHP-скрипт, выполняет его с помощью интерпретатора и возвращает нам ответ в виде результата выполнения этого скрипта.

Возникает вопрос: «А как можно передать от пользователя внутрь скрипта какие-либо данные?». Ответов на него у нас сразу несколько, и все мы их рассмотрим в этом уроке.

Метод GET

Когда мы вбиваем адрес скрипта и нажимаем Enter, выполняется GET-запрос по протоколу HTTP. В этом типе запроса к основному адресу мы можем прикрепить дополнительные параметры. Для того чтобы передать их, в конце основного адреса ставится знак вопроса, и мы можем перечислять эти параметры — вот так:
параметр1=значение1.
При этом если нам нужно указать несколько параметров, то мы разделяем их с помощью знака амперсанда:
арг1=знач1&арг2=знач2.

Пример:
http://myproject.loc/index.php?arg1=123&arg2=scrrr

Если сейчас перейти по этой ссылке в браузере, то на сервер передадутся 2 параметра:

  • arg1 со значением 123;
  • arg2 со значением scrrr.

Мы можем очень просто получить к ним доступ из PHP с помощью магической переменной $_GET. Эта переменная является суперглобальной, то есть доступна нам в PHP всегда и в любом месте. Она представляет собой ассоциативный массив, в котором хранятся все переданные в запросе GET-параметры.

Давайте изменим код нашего index.php, чтобы узнать, что именно хранится в этой переменной.

<?php

var_dump($_GET);

И откроем этот url: http://myproject.loc/index.php?arg1=123&arg2=scrrr

Мы увидим следующее:

array (size=2)
  'arg1' => string '123' (length=3)
  'arg2' => string 'scrrr' (length=5)

Как мы можем видеть, это действительно наши переданные аргументы, представленные в виде ассоциативного массива.

Учимся обрабатывать параметры

Давайте попробуем передать другие аргументы:
http://myproject.loc/index.php?login=admin&password=12345

Результат:

array (size=2)
  'login' => string 'admin' (length=5)
  'password' => string '12345' (length=5)

Разумеется, мы можем обращаться к этим элементам как к элементам обычного массива. Например, так:

<?php
echo $_GET['login'] 

Давайте создадим простую страничку, на которой мы будем выводить переданные с помощью GET-запроса логин и пароль.

<?php
$login = !empty($_GET['login']) ? $_GET['login'] : 'логин не передан!';
$password = !empty($_GET['password']) ? $_GET['password'] : 'пароль не передан!';
?>
<html>
<head>
    <title>Знакомство с GET-запросами</title>
</head>
<body>
<p>
    Переданный логин: <?= $login ?>
    <br>
    Переданный пароль: <?= $password ?>
</p>
</body>
</html>

Обновим нашу страничку в браузере и увидим результат.
Обработанные query-параметры

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

Учимся работать с формами

Давайте теперь вспомним уроки про формы из курса по HTML и сделаем простейшую форму для отправки GET-запроса на страничку.

Давайте запишем в наш index.php следующий код:

<html>
<head>
    <title>Форма входа</title>
</head>
<body>
<form action="/login.php" method="get">
    <label>
        Логин <input type="text" name="login">
    </label>
    <br>
    <label>
        Пароль <input type="password" name="password">
    </label>
    <br>
    <input type="submit" value="Войти">
</form>
</body>
</html>

И давайте теперь откроем его в браузере: http://myproject.loc/index.php

Как мы видим по исходному коду, форма отправит аргументы login и password с введенными значениями на адрес /login.php.

Давайте введем в поля значения admin и Pa$$w0rd соответственно и нажмем на кнопку «Войти».
Форма входа

Нас отправит на страничку http://myproject.loc/login.php?login=admin&password=Pa%24%24w0rd

Где сервер нам скажет о том, что такой странички не найдено.
Ошибка 404

Отлично! Так давайте же её создадим! Создаём рядом с нашим index.php файл с именем login.php. И пишем в него следующий код:

<?php
$login = !empty($_GET['login']) ? $_GET['login'] : '';
$password = !empty($_GET['password']) ? $_GET['password'] : '';

if ($login === 'admin' && $password === 'Pa$$w0rd') {
    $isAuthorized = true;
} else {
    $isAuthorized = false;
}
?>
<html>
<head>
    <title>Результат авторизации</title>
</head>
<body>
<p>
    <?= $isAuthorized ? 'Логин и пароль верные!' : 'Неправильный логин или пароль' ?>
</p>
</body>
</html>

Вернёмся на нашу форму и повторно отправим пароль. Теперь мы увидим информацию о том, что мы успешно авторизовались. Это простейший прототип формы авторизации. Разумеется, он сильно упрощён, не всё сразу. А пока – делаем домашнее задание.

Если этот урок был вам полезен, расскажите об этом курсе своим знакомым или поделитесь на него ссылкой в социальных сетях. Также, если вы хотите помочь проекту материально – вы можете сделать это с помощью краудфандинговой платформы Patreon – так вы внесёте неоценимый вклад в развитие проекта. А данный урок вышел при поддержке человека с ником NicoBurno. Спасибо тебе!

Домашнее задание
Для просмотра нужно войти на сайт.
Или получить доступ прямо сейчас:


Нажимая эту кнопку
Вы принимаете политику конфиденциальности

КОММЕНТАРИИ

 Denchik 2018-01-22 14:16:28
+1
<?php
$login = !empty($_GET['login']) ? $_GET['login'] : '';
$password = !empty($_GET['password']) ? $_GET['password'] : '';

if ($login === 'admin' && $password === 'Pa$$w0rd') {
    $isAuthorized = 'Всё верно';
} else if($login !== 'admin') {
    $isAuthorized = 'Логин неверный';
} else if($login === 'admin' && $password !=='Pa$$w0rd'){
    $isAuthorized = 'Пароль неверный';
}
?>
<html>
<head>
    <title>Результат авторизации</title>
</head>
<body>
<p>
    <?= $isAuthorized ?>
</p>
</body>
</html>
Ответить
  •  ivashkevich 2018-01-22 17:40:19
    0

    Ага, хорошо. Но в конце можно не проверять условие, так как остался только один вариант, просто else. Поправь коммент.

    Ответить
    •  Denchik 2018-01-24 12:00:18
      +1
      <?php
      $login = !empty($_GET['login']) ? $_GET['login'] : '';
      $password = !empty($_GET['password']) ? $_GET['password'] : '';
      
      if ($login === 'admin' && $password === 'Pa$$w0rd') {
          $isAuthorized = 'Всё верно';
      } else if($login !== 'admin') {
          $isAuthorized = 'Логин неверный';
      } else {
          $isAuthorized = 'Пароль неверный';
      }
      ?>
      <html>
      <head>
          <title>Результат авторизации</title>
      </head>
      <body>
      <p>
          <?= $isAuthorized ?>
      </p>
      </body>
      </html>
      Ответить
Чтобы написать комментарий нужно войти на сайт.
Или получить доступ прямо сейчас:


Нажимая эту кнопку
Вы принимаете политику конфиденциальности