Урок 10-11

Урок 10: Передача переменных через URL

При работе с PHP часто необходимо передать переменные с одной страницы в другую. Этот урок - о передаче переменных в URL.

Как это работает?

Возможно, вас удивляло, почему некоторые URL выглядят наподобие этого:
 http://html.net/page.php?id=1254
 
 
Почему после имени страницы стоит знак вопроса?
Ответ: символы после знака вопроса это строка HTTP-запроса. Строка HTTP-запроса может содержать как имена переменных, так и их значения. В вышеприведённом примере строка HTTP-запроса содержит переменную "id" со значением "1254".
Вот другой пример:
 http://html.net/page.php?name=Joe
 
 
То есть у вас снова переменная ("name") со значением ("Joe").

Как получить переменную с помощью PHP?

Предположим, у вас есть PHP-страница people.php. Можно вызвать её с использованием URL:
 people.php?name=Joe
 
 
В PHP вы можете получить значение переменной 'name' таким образом:
 $_GET["name"]
 
 
То есть вы используете документация$_GET для поиска значения именованной переменной. Попробуем на примере:
 <html>
 <head>
 <title>Строка запроса</title>
 </head>
 <body>

 <?php

 // Значение переменной найдено
 echo "<h1>Hello " . $_GET["name"] . "</h1>";

 ?>

 </body>
 </html>
 
 
Попробуйте в этом примере заменить "Joe" вашим собственным в URL и снова вызвать документ! Довольно прикольно, а?Несколько переменных в одном URL
В URL можно передавать и не одну переменную. Разделяя переменные знаком &, можно передавать несколько:
 people.php?name=Joe&age=24
 
 
Этот URL содержит две переменные: name и age. Как и ранее, можно получит переменные так :
 $_GET["name"]
 $_GET["age"]
 
 
Добавим в пример ещё одну переменную:
 <html>
 <head>
 <title>Строка запроса</title>
 </head>
 <body>

 <?php

 // Значение имени переменной name найдено
 echo "<h1>Hello " . $_GET["name"] . "</h1>";
  
 // Значение имени переменной age найдено
 echo "<h1>You are " . $_GET["age"] . " years old </h1>";

 ?>

 </body>
 </html>

Урок 11: Передача переменных через формы

Интерактивные сайты принимают ввод от пользователей. Один из распространённых способов получения ввода - формы.
В этом уроке посмотрим, как создать форму и обработать ввод на сервере.

<form>

При создании формы участвуют два важных атрибута: action и method.
action
Используется для ввода URL, куда отправляется форма. Это может быть PHP-файл, который обрабатывает ввод.
method
Может иметь значение "post" или "get", которые являются различными методами передачи данных. Пока вам нет необходимости углубляться в отличия этих методов; методом "get" данные отправляются через URL, а методом "post" - как блок данных через стандартный сервис ввода/standard input service (STDIN). В последнем пройденном уроке мы видели, как данные получаются через URL с использованием документация$_GET. В этом уроке мы рассмотрим, как получаются данные, отправленные через форму методом "post".

HTML-страница с формой

Страница с формой не обязаны быть РНР-файлом (но может быть). Она даже не обязана находиться на том же сайте, что и файл, который получает данные.
В нашем первом примере мы рассмотрим очень простую форму с одним текстовым полем:
 <html>
 <head>
 <title>Форма</title>
 </head>
 <body>

 <h1>Введите ваше имя</h1>

 <form method="post" action="handler.php">
 <input type="text" name="username">
 <input type="submit">
 </form>

 </body>
 </html>

 
 
В браузере отобразится форма:
Form
Теперь начинается самое интересное: получение и обработка данных с помощью PHP.

Запрашивание данных формы с помощью PHP

Если вам необходимо запросить данные, отправленные через форму (методом post), вы используете документация$_POST:
 
 $_POST["fieldname"];
 
 
который возвратит значение поля формы. Попробуем это на примере.
Сначала создадим страницу с формой, как ранее. Затем создадим РНР-страницу (обработчик) "handler.php" (обратите внимание, что это имя страницы, которое мы записали в атрибуте action в нашей <form>).
Файл "handler.php" будет содержать:
 <html>
 <head>
 <title>Форма</title>
 </head>

 <body>

 <?php

 echo "<h1>Привет, " . $_POST["username"] . "</h1>";

 ?>

 </body>
 </html>
 
 

Пользовательский ввод и условия

В следующем примере мы попробуем использовать пользовательский ввод для создания условий. Сначала нам понадобится форма:
 <html>
 <head>
 <title>Форма</title>
 </head>
 <body>

 <form method="post" action="handler.php">

 <p>Как вас зовут:</p>
 <input type="text" name="username"></p>

 <p>Ваш любимый цвет:
 <input type="radio" name="favoritecolor" value="r" /> Красный 
 <input type="radio" name="favoritecolor" value="g" /> Зелёный 
 <input type="radio" name="favoritecolor" value="b" /> Синий </p>

 <input type="submit" value="Submit" />

 </form>

 </body>
 </html>
 
 
В браузере это будет так:
Теперь используем эти вводы для создания страницы, которая автоматически изменяет цвет фона на основе указаний пользователя. Это делается созданием условия (см. Урок 6), которое использует данные, введённые пользователем в форму.
 <?php

 $strHeading = "<h1>Привет, " . $_POST["username"] . "</h1>";

 switch ($_POST["favoritecolor"]) {
 case "r":
  $strBackgroundColor = "rgb(255,0,0)";
  break;
 case "g";
  $strBackgroundColor = "rgb(0,255,0)";
  break;
 case "b":
  $strBackgroundColor = "rgb(0,0,255)";
  break;
 default:
  $strBackgroundColor = "rgb(255,255,255)";
  break;
 }

 ?>

 <html>
 <head>
 <title>Форма</title>

 </head>
 <body style="background: <?php echo $strBackgroundColor; ?>;">

 <? echo $strHeading; ?>

 </body>
 </html>
 
 
Фон будет белым, если пользователь не укажет в форме предпочтительный цвет. Это достигается установкой значения default(по умолчанию), которое применяется, если ни одно из условий не выполнено.
Но что будет, если пользователь не укажет своё имя? Тогда в заголовке будет только "Привет,". Создадим дополнительное условие для изменения этого варианта.
 <?php

 $strUsername = $_POST["username"];
  
 if ($strUsername != "") {
     $strHeading = "<h1>Привет, " . $_POST["username"] . "</h1>";
 }
 else {
     $strHeading = "<h1>Привет, незнакомец!</h1> ";
 }

 switch ($_POST["favorite color"]) {
 case "r":
  $strBackgroundColor = "rgb(255,0,0)";
  break;
 case "g";
  $strBackgroundColor = "rgb(0,255,0)";
  break;
 case "b":
  $strBackgroundColor = "rgb(0,0,255)";
  break;
 default:
  $strBackgroundColor = "rgb(255,255,255)";
  break;
 }

 ?>

 <html>

 <head>

 <title>Форма</title>
 </head>
 <body style="background: <?php echo $strBackgroundColor; ?>;">

 <? echo $strHeading; ?>

 </body>
 </html>

 
 
В вышеприведённом примере мы используем условия для проверки информации от пользователя. В данном случае не столь важно, если пользователь не укажет имя. Но поскольку ваш код становится всё более навороченным, жизненно важно, чтобы учитывался вариант, когда пользователь вообще не заполняет формы.

Пример: Форма контактной информации

Основываясь на имеющихся знаниях о PHP и формах, вы можете создать форму контактной информации с использованием функции документацияmail, которая имеет следующий синтаксис:
 
 mail(куда, субъект, сообщение);
 
 
Сначала создаём простую HTML-форму:
 <html>
 <head>
 <title>Форма контактной информации</title>
 </head>
 <body>

 <h1>Форма контактной информации</h1>

 <form method="post" action="handler.php">
 <p>Субъект:<br /><input type="text" name="subject" /></p>
 <p>Сообщение:<br /><textarea name="message"></textarea></p>
 <input type="submit">
 </form>

 </body>
 </html>
 
 
Затем понадобится РНР-скрипт для отправки пользовательского ввода:
 <html>
 <head>
 <title>Функции</title>
 </head>
 <body>

 <?php

 // Получатель (измените на ваш e-mail адрес)
 $strEmail = "name@mydomain.com";

 // Получить пользовательские вводы
 $strSubject = $_POST["subject"];
 $strMessage = $_POST["message"];

 mail($strEmail,$strSubject,$strMessage);
 echo "Mail Sent.";
  
 
 ?>

 </body>
 </html>
 
 
Заметьте, что пример работает, только если у вас есть доступ к почтовому серверу. По умолчанию это не так в XAMPP и в большинстве бесплатных хостов. Итак, некоторые хосты могут требовать наличия заголовка формы, который выполняется с дополнительным параметром:
 
 mail("вы@имявашегодомена.com", "Тест", "Это тестовое сообщение", "От: мне@мойдомен.com");
 
 

Комментариев нет:

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