В самом начале курса мы уже говорили о том, что PHP – это скриптовый
язык, обрабатываемый
Взаимодействие между
Услугами одного
Логичнее всего устанавливать
Существует множество типов
Такой
Обычно на компьютере-
Из всех типов
Далее в ходе лекции, говоря "
В качестве примеров
На рис. 4.1 и в таблице 4.1 приведена статистика использования
различных
(рис 4.1) Статистика использования ведущих web-серверов| Разработчик | Февраль 2004 | Проценты | Март 2004 | Проценты | Изменение |
|---|---|---|---|---|---|
| 31703884 | 67.21 | 32280582 | 67.20 | -0.01 | |
| Microsoft | 9849971 | 20.88 | 10099760 | 21.02 | 0.14 |
| SunONE | 1657295 | 3.51 | 1651575 | 3.44 | -0.07 |
| Zeus | 755227 | 1.60 | 762716 | 1.59 | -0.01 |
Как видно из приведенной таблицы,
Internet построен по многоуровневому принципу, от физического уровня, связанного с физическими аспектами передачи двоичной информации, и до прикладного уровня, обеспечивающего интерфейс между пользователем и сетью.
Сообщения по сети при использовании протокола
Протокол реализует
Ответ
В протоколе не указывается, кто должен открывать и закрывать
соединение между
Давайте рассмотрим более подробно, в какой форме отправляются запросы
на
<Простой-Запрос> := <Метод> <символ пробел>
<Запрашиваемый-URL> <символ новой строки>
В качестве метода могут быть указаны , , , PUT, DELETE и
другие. О наиболее распространенных из них мы поговорим немного
позже. В качестве запрашиваемого URL чаще всего используется
Пример
GET http://phpbook.info/
Здесь – это метод доступа, т.е. метод, который должен быть
применен к запрашиваемому ресурсу, а http://phpbook.info/ – это
<Полный запрос> := <Строка Состояния>
(<Общий заголовок>|<Заголовок запроса>|
<Заголовок содержания>)
<символ новой строки>
[<содержание запроса>]
Квадратные скобки здесь обозначают необязательные элементы заголовка,
через вертикальную черту перечислены альтернативные варианты. Элемент <Строка состояния> содержит
POST http://phpbook.info/cgi-bin/test HTTP/1.0
В данном случае используется метод
В обеих формах запроса важное место занимает URL запрашиваемого
ресурса. Чаще всего URL используется в виде
Полная форма содержит тип протокола доступа, адрес
В сокращенной форме опускают протокол и адрес
(рис 4.2) Полная форма URLДалее мы рассмотрим наиболее распространенные
Как уже говорилось, любой запрос , и . Метод позволяет получить любые
данные, идентифицированные с помощью URL в запросе ресурса. Если URL
указывает на программу, то возвращается результат работы программы, а
не ее текст (если, конечно, текст не есть результат ее работы).
Дополнительная информация, необходимая для обработки запроса,
встраивается в сам запрос (в адресную строку). При использовании
метода в поле тела ресурса возвращается собственно затребованная
информация (текст HTML-документа, например).
Существует разновидность метода – условный . Этот метод
сообщает
Метод аналогичен методу , только не возвращает тело ресурса и
не имеет условного аналога. Метод используют для получения
информации о ресурсе. Это может пригодиться, например, при решении
задачи тестирования гипертекстовых ссылок.
Метод разработан для передачи на и , в
передается тело ресурса, которое и является информацией, получаемой
из полей форм или других источников ввода.
До сих пор мы только теоретизировали, знакомились с основными
понятиями. Теперь пора научиться использовать все это на практике.
Далее в лекции мы рассмотрим, как посылать запросы
Как передавать данные
Разберемся с синтаксисом
Итак, для создания формы в языке HTML используется тег . Внутри
него находится одна или несколько команд . С помощью атрибутов и тега задаются определяет тип и различные характеристики запрашиваемой
информации. Отправка данных формы происходит после нажатия кнопки типа . Создадим форму для регистрации участников заочной
школы программирования.
<h2>Форма для регистрации участников</h2>
<form action="1.php" method=POST> <!--создаем форму-->
<!--данные формы будет обрабатывать файл 1.php, при
отправке запроса будет использован метод POST-->
Имя <br><input type=text name="first_name"
value="Введите Ваше имя"><br>
Фамилия <br><input type=text name="last_name"><br>
E-mail <br><input type=text name="email"><br>
<p>
Выберите курс, который вы бы хотели посещать:<br>
<input type=radio name="kurs" value="PHP">PHP<br>
<input type=radio name="kurs" value="Lisp">Lisp<br>
<input type=radio name="kurs" value="Perl">Perl<br>
<input type=radio name="kurs" value="Unix">Unix<br></p>
<p>Что вы хотите, чтобы мы знали о вас? <BR>
<textarea name="comment" cols=32 rows=5></textarea></p>
<p><input name="confirm" type=checkbox
checked>Подтвердить получение <br>
<input type=submit value="Отправить">
<input type=reset value="Отменить"></p>
</form>
После обработки браузером этот файл будет выглядеть примерно так:
(рис 4.3) Пример html-формыВот так создаются и выглядят или , и в чем будет разница.
При отправке данных формы с помощью метода содержимое формы
добавляется к имя=значения,
объединенных с помощью амперсанда :
action?name1=value1name2=value2name3=value3
Здесь – это тега , либо
сама текущая программа, если этот атрибут опущен). Имена name1, name2, name3 соответствуют именам элементов формы, а value1, value2, value3 – значениям этих элементов. Все специальные символы, включая =
и , в именах или значениях этих параметров будут закодированы. Поэтому не
стоит использовать в названиях или значениях элементов формы эти
символы и символы кириллицы в идентификаторах.
Если в поле для ввода ввести какой-нибудь служебный символ, то он
будет передан в его шестнадцатеричном коде, например, символ $
заменится на %24. Так же передаются и русские буквы.
Для полей ввода текста и пароля (это элементы с атрибутом type=text и type=password ), значением будет то, что введет
пользователь. Если пользователь ничего не вводит в такое поле, то в
name=, где name
соответствует имени этого элемента формы.
Для кнопок типа checkbox и value определяется
атрибутом VALUE в том случае, когда кнопка отмечена. Не отмеченные
кнопки при составлении NAME (и различные VALUE ), если это необходимо. Кнопки типа NAME и различные атрибуты VALUE.
В принципе создавать не
обязательно. Можно просто добавить в строку
http://phpbook.info/test.php?id=10user=pit
В связи с этим у передачи данных методом есть один существенный
недостаток – любой может подделать значения параметров. Поэтому не
советуем использовать этот метод для доступа к защищенным паролем
страницам, для передачи информации, влияющей на безопасность работы
программы или для
передачи информации, которую не разрешено изменять пользователю.
Несмотря на все эти недостатки, использовать метод достаточно
удобно при отладке скриптов (тогда можно видеть значения и имена
передаваемых переменных) и для передачи параметров, не влияющих на
безопасность.
Содержимое формы кодируется точно так же, как для метода (см.
выше), но вместо добавления строки к . Если присутствует
атрибут ACTION, то значение
Информация, введенная пользователем и отправленная , подается на , или текущему скрипту, если этот атрибут опущен.
Длина посылаемого файла передается в CONTENT_LENGTH, а тип данных – в переменной CONTENT_TYPE.
Передать данные методом можно только с помощью . Соответственно и изменить значение параметров можно, только
изменив значение, введенное в форму. При использовании
пользователь не видит передаваемые
Основное преимущество запросов – это их большая безопасность и
функциональность по сравнению с GET-запросами. Поэтому метод
чаще используют для передачи важной информации, а также информации
большого объема. Тем не менее не стоит целиком полагаться на
безопасность этого механизма, поскольку данные запроса также
можно подделать, например создав html-файл на своей машине и заполнив
его нужными данными. Кроме того, не все , что ограничивает варианты его использования.
REMOTE_ADDR – IP-адрес хоста (компьютера), отправляющего запрос; REMOTE_HOST – HTTP_REFERER – адрес страницы, ссылающейся на текущий скрипт; REQUEST_METHOD – метод, который был использован при отправке запроса; QUERY_STRING – информация, находящаяся в SCRIPT_NAME – виртуальный путь к программе, которая должна
выполняться; HTTP_USER_AGENT – информация о браузере, который использует До сих пор мы упоминали только, что запросы
Внутри first_name=Nina, то внутри скрипта появлялась переменная $first_name со значением Nina. Если требовалось различать, каким
методом были переданы данные, то использовались ассоциативные массивы и , ключами которых являлись имена
переданных переменных, а значениями – соответственно значения этих
переменных. Таким образом, если пара first_name = Nina передана методом , то $.
Использовать в программе имена переданных переменных напрямую
небезопасно. Поэтому было решено начиная с PHP 4.1.0 задействовать
для обращения к переменным, переданным с помощью HTTP-запросов,
специальный массив – . Этот массив содержит данные,
переданные методами и , а также с помощью
Пример 4.2. Допустим, мы создали форму для регистрации участников
заочной школы программирования, как в приведенном выше примере. Тогда
в файле 1.php, обрабатывающем эту форму, можно написать следующее:
<?php
$str = "Здравствуйте,
".$_REQUEST["first_name"]. "
".$_REQUEST["last_name"]."! <br>";
$str .="Вы выбрали для изучения курс по
".$_REQUEST["kurs"];
echo $str;
?>
Тогда, если в форму мы ввели имя "Вася", фамилию "Петров" и выбрали среди всех курсов курс по PHP, на экране браузера получим такое сообщение:
Здравствуйте, Вася Петров! Вы выбрали для изучения курс по PHP
После введения массива массивы и для однородности были переименованы в и
соответственно, но сами они из обихода не исчезли из соображений
совместимости с предыдущими версиями PHP. В отличие от своих
предшественников, массивы и стали суперглобальными, т.е.
доступными напрямую и внутри функций и методов.
Приведем пример использования этих массивов. Допустим, нам нужно
обработать форму, содержащую элементы ввода с именами first_name, last_name, kurs (например, форму form.html, приведенную выше). Данные
были переданы методом , и данные, переданные другими методами, мы
обрабатывать не хотим. Это можно сделать следующим образом:
<?php
$str = "Здравствуйте,
".$_POST ["first_name"]."
".$_POST ["last_name"] ."! <br>";
$str .= "Вы выбрали для изучения курс по ".
$_POST["kurs"];
echo $str;
?>
Тогда на экране браузера, если мы ввели имя "Вася", фамилию "Петров" и выбрали среди всех курсов курс по PHP, увидим сообщение, как в предыдущем примере:
Здравствуйте, Вася Петров! Вы выбрали для изучения курс по PHP
Для того, чтобы сохранить возможность обработки скриптов более ранних
версий, чем PHP 4.1.0, была введена директива ,
разрешающая или запрещающая доступ к переменным непосредственно по их
именам. Если в , то к
переменным, переданным и , можно обращаться
просто по их именам (т.е. можно писать $first_name ). Если же , то нужно писать $ или $, $, $, $. С точки
зрения безопасности эту директиву лучше отключать (т.е. ). При включенной директиве
перечисленные выше массивы также будут содержать данные, переданные
Иногда возникает необходимость узнать значение какой-либо . Она возвращает значение
<?
echo getenv('REQUEST_METHOD');
// возвратит использованный метод
echo getenv ('REMOTE_ADDR');
// выведет IP-адрес пользователя,
// пославшего запрос
?>
Как мы уже говорили, если используется метод , то данные
передаются добавлением
getenv('QUERY_STRING');
Благодаря этому можно по методу передавать данные в каком-нибудь
другом виде. Например, указывать только значения нескольких
параметров через знак плюс, а в скрипте разбирать строку запроса на
части или можно передавать значение всего одного параметра. В этом
случае в массиве появится пустой элемент с ключом, равным этому
значению (всей + ", встретившийся в
_ ".
Методом данные передаются только с помощью форм, и пользователь
( :
getenv('HTTP_REFERER');
Теперь самое время решить задачу, сформулированную в начале лекции.
Напомним, в чем состояла задача, и уточним ее формулировку. Нужно написать форму для регистрации участников заочной школы программирования и после регистрации отправить участнику сообщение. Мы назвали это сообщение универсальным письмом, но оно будет немного отличаться от того письма, которое мы составили на предыдущей лекции. Здесь мы также не будем отправлять что-либо по электронной почте, дабы не уподобляться спамерам, а просто сгенерируем это сообщение и выведем его на экран браузера. Начальный вариант формы регистрации мы уже приводили выше. Изменим его таким образом, чтобы каждый регистрирующийся мог выбрать сколько угодно курсов для посещения, и не будем подтверждать получение регистрационной формы.
<h2>Форма для регистрации студентов</h2>
<form action="1.php" method=POST>
Имя <br><input type=text name="first_name"
value="Введите Ваше имя"><br>
Фамилия <br><input type=text name="last_name"><br>
E-mail <br><input type=text name="email"><br>
<p> Выберите курс, который вы бы хотели посещать:<br>
<input type=checkbox name='kurs[]' value='PHP'>PHP<br>
<input type=checkbox name='kurs[]' value='Lisp'>Lisp<br>
<input type=checkbox name='kurs[]' value='Perl'>Perl<br>
<input type=checkbox name='kurs[]' value='Unix'>Unix<br>
<P>Что вы хотите, чтобы мы знали о вас? <BR>
<textarea name="comment" cols=32 rows=5></textarea>
<input type=submit value="Отправить">
<input type=reset value="Отменить">
</form>
Здесь все достаточно просто и понятно. Единственное, что можно
отметить, – это способ передачи значений элемента checkbox. Когда мы
пишем в имени элемента kurs[], это значит, что первый отмеченный
элемент checkbox будет записан в первый элемент массива kurs, второй
отмеченный checkbox – во второй элемент массива и т.д. Можно,
конечно, просто дать разные имена элементам checkbox, но это усложнит
обработку данных, если курсов будет много.
Скрипт, который все это будет разбирать и обрабатывать, называется 1.php (форма ссылается именно на этот файл, что записано в ее
атрибуте ). По умолчанию используется для передачи метод ,
но мы указали . По полученным сведениям от зарегистрировавшегося
человека, скрипт генерирует соответствующее сообщение. Если человек
выбрал какие-то курсы, то ему выводится сообщение о времени их
проведения и о лекторах, которые их читают. Если человек ничего не
выбрал, то выводится сообщение о следующем собрании заочной школы
программистов (ЗШП).
<?
// создадим массивы соответствий курс-время его
// проведения и курс-его лектор
$times = array("PHP"=>"14.30","Lisp"=>"12.00",
"Perl"=>"15.00","Unix"=>"14.00");
$lectors = array("PHP"=>"Василий Васильевич",
"Lisp"=>"Иван Иванович", "Perl"=>"Петр Петрович", "Unix"=>"Семен Семенович");
define("SIGN","С уважением, администрация");
// определяем подпись письма как константу
define("MEETING_TIME","18.00");
// задаем время собрания студентов
$date = "12 мая"; // задаем дату проведения лекций
//начинаем составлять текст сообщения
$str = "Здравствуйте, уважаемый " . $_POST["first_name"]
. " " . $_POST["last_name"]."!<br>";
$str .= "<br>Сообщаем Вам, что ";
$kurses = $_POST["kurs"]; // сохраним в этой переменной
// список выбранных курсов
if (!isset($kurses)) { // если не выбран ни один курс
$event = "следующее собрание студентов";
$str .= "$event состоится $date ". MEETING_TIME . "<br>";
} else { // если хотя бы один курс выбран
$event = "выбранные Вами лекции состоятся $date <ul>";
//функция count вычисляет число элементов в массиве
$lect = "";
for ($i=0;$i<count($kurses);$i++){
// для каждого выбранного курса
$k = $kurses[$i]; // запоминаем название курса
$lect = $lect . "<li>лекция по $k в $times[$k]";
// составляем сообщение
$lect .= " (Ваш лектор, $lectors[$k])";
}
$event = $event . $lect . "</ul>";
$str .= "$event";
}
$str .= "<br>". SIGN; // добавляем подпись
echo $str; // выводим сообщение на экран
?>
Подведем итоги. Мы научились отличать
В самом начале курса мы уже говорили о том, что PHP – это скриптовый
язык, обрабатываемый
Взаимодействие между
Услугами одного
Логичнее всего устанавливать
Существует множество типов
Такой
Обычно на компьютере-
Из всех типов
Далее в ходе лекции, говоря "
В качестве примеров
На рис. 4.1 и в таблице 4.1 приведена статистика использования
различных
(рис 4.1) Статистика использования ведущих web-серверов| Разработчик | Февраль 2004 | Проценты | Март 2004 | Проценты | Изменение |
|---|---|---|---|---|---|
| 31703884 | 67.21 | 32280582 | 67.20 | -0.01 | |
| Microsoft | 9849971 | 20.88 | 10099760 | 21.02 | 0.14 |
| SunONE | 1657295 | 3.51 | 1651575 | 3.44 | -0.07 |
| Zeus | 755227 | 1.60 | 762716 | 1.59 | -0.01 |
Как видно из приведенной таблицы,
Internet построен по многоуровневому принципу, от физического уровня, связанного с физическими аспектами передачи двоичной информации, и до прикладного уровня, обеспечивающего интерфейс между пользователем и сетью.
Сообщения по сети при использовании протокола
Протокол реализует
Ответ
В протоколе не указывается, кто должен открывать и закрывать
соединение между
Давайте рассмотрим более подробно, в какой форме отправляются запросы
на
<Простой-Запрос> := <Метод> <символ пробел>
<Запрашиваемый-URL> <символ новой строки>
В качестве метода могут быть указаны , , , PUT, DELETE и
другие. О наиболее распространенных из них мы поговорим немного
позже. В качестве запрашиваемого URL чаще всего используется
Пример
GET http://phpbook.info/
Здесь – это метод доступа, т.е. метод, который должен быть
применен к запрашиваемому ресурсу, а http://phpbook.info/ – это
<Полный запрос> := <Строка Состояния>
(<Общий заголовок>|<Заголовок запроса>|
<Заголовок содержания>)
<символ новой строки>
[<содержание запроса>]
Квадратные скобки здесь обозначают необязательные элементы заголовка,
через вертикальную черту перечислены альтернативные варианты. Элемент <Строка состояния> содержит
POST http://phpbook.info/cgi-bin/test HTTP/1.0
В данном случае используется метод
В обеих формах запроса важное место занимает URL запрашиваемого
ресурса. Чаще всего URL используется в виде
Полная форма содержит тип протокола доступа, адрес
В сокращенной форме опускают протокол и адрес
(рис 4.2) Полная форма URLДалее мы рассмотрим наиболее распространенные
Как уже говорилось, любой запрос , и . Метод позволяет получить любые
данные, идентифицированные с помощью URL в запросе ресурса. Если URL
указывает на программу, то возвращается результат работы программы, а
не ее текст (если, конечно, текст не есть результат ее работы).
Дополнительная информация, необходимая для обработки запроса,
встраивается в сам запрос (в адресную строку). При использовании
метода в поле тела ресурса возвращается собственно затребованная
информация (текст HTML-документа, например).
Существует разновидность метода – условный . Этот метод
сообщает
Метод аналогичен методу , только не возвращает тело ресурса и
не имеет условного аналога. Метод используют для получения
информации о ресурсе. Это может пригодиться, например, при решении
задачи тестирования гипертекстовых ссылок.
Метод разработан для передачи на и , в
передается тело ресурса, которое и является информацией, получаемой
из полей форм или других источников ввода.
До сих пор мы только теоретизировали, знакомились с основными
понятиями. Теперь пора научиться использовать все это на практике.
Далее в лекции мы рассмотрим, как посылать запросы
Как передавать данные
Разберемся с синтаксисом
Итак, для создания формы в языке HTML используется тег . Внутри
него находится одна или несколько команд . С помощью атрибутов и тега задаются определяет тип и различные характеристики запрашиваемой
информации. Отправка данных формы происходит после нажатия кнопки типа . Создадим форму для регистрации участников заочной
школы программирования.
<h2>Форма для регистрации участников</h2>
<form action="1.php" method=POST> <!--создаем форму-->
<!--данные формы будет обрабатывать файл 1.php, при
отправке запроса будет использован метод POST-->
Имя <br><input type=text name="first_name"
value="Введите Ваше имя"><br>
Фамилия <br><input type=text name="last_name"><br>
E-mail <br><input type=text name="email"><br>
<p>
Выберите курс, который вы бы хотели посещать:<br>
<input type=radio name="kurs" value="PHP">PHP<br>
<input type=radio name="kurs" value="Lisp">Lisp<br>
<input type=radio name="kurs" value="Perl">Perl<br>
<input type=radio name="kurs" value="Unix">Unix<br></p>
<p>Что вы хотите, чтобы мы знали о вас? <BR>
<textarea name="comment" cols=32 rows=5></textarea></p>
<p><input name="confirm" type=checkbox
checked>Подтвердить получение <br>
<input type=submit value="Отправить">
<input type=reset value="Отменить"></p>
</form>
После обработки браузером этот файл будет выглядеть примерно так:
(рис 4.3) Пример html-формыВот так создаются и выглядят или , и в чем будет разница.
При отправке данных формы с помощью метода содержимое формы
добавляется к имя=значения,
объединенных с помощью амперсанда :
action?name1=value1name2=value2name3=value3
Здесь – это тега , либо
сама текущая программа, если этот атрибут опущен). Имена name1, name2, name3 соответствуют именам элементов формы, а value1, value2, value3 – значениям этих элементов. Все специальные символы, включая =
и , в именах или значениях этих параметров будут закодированы. Поэтому не
стоит использовать в названиях или значениях элементов формы эти
символы и символы кириллицы в идентификаторах.
Если в поле для ввода ввести какой-нибудь служебный символ, то он
будет передан в его шестнадцатеричном коде, например, символ $
заменится на %24. Так же передаются и русские буквы.
Для полей ввода текста и пароля (это элементы с атрибутом type=text и type=password ), значением будет то, что введет
пользователь. Если пользователь ничего не вводит в такое поле, то в
name=, где name
соответствует имени этого элемента формы.
Для кнопок типа checkbox и value определяется
атрибутом VALUE в том случае, когда кнопка отмечена. Не отмеченные
кнопки при составлении NAME (и различные VALUE ), если это необходимо. Кнопки типа NAME и различные атрибуты VALUE.
В принципе создавать не
обязательно. Можно просто добавить в строку
http://phpbook.info/test.php?id=10user=pit
В связи с этим у передачи данных методом есть один существенный
недостаток – любой может подделать значения параметров. Поэтому не
советуем использовать этот метод для доступа к защищенным паролем
страницам, для передачи информации, влияющей на безопасность работы
программы или для
передачи информации, которую не разрешено изменять пользователю.
Несмотря на все эти недостатки, использовать метод достаточно
удобно при отладке скриптов (тогда можно видеть значения и имена
передаваемых переменных) и для передачи параметров, не влияющих на
безопасность.
Содержимое формы кодируется точно так же, как для метода (см.
выше), но вместо добавления строки к . Если присутствует
атрибут ACTION, то значение
Информация, введенная пользователем и отправленная , подается на , или текущему скрипту, если этот атрибут опущен.
Длина посылаемого файла передается в CONTENT_LENGTH, а тип данных – в переменной CONTENT_TYPE.
Передать данные методом можно только с помощью . Соответственно и изменить значение параметров можно, только
изменив значение, введенное в форму. При использовании
пользователь не видит передаваемые
Основное преимущество запросов – это их большая безопасность и
функциональность по сравнению с GET-запросами. Поэтому метод
чаще используют для передачи важной информации, а также информации
большого объема. Тем не менее не стоит целиком полагаться на
безопасность этого механизма, поскольку данные запроса также
можно подделать, например создав html-файл на своей машине и заполнив
его нужными данными. Кроме того, не все , что ограничивает варианты его использования.
REMOTE_ADDR – IP-адрес хоста (компьютера), отправляющего запрос; REMOTE_HOST – HTTP_REFERER – адрес страницы, ссылающейся на текущий скрипт; REQUEST_METHOD – метод, который был использован при отправке запроса; QUERY_STRING – информация, находящаяся в SCRIPT_NAME – виртуальный путь к программе, которая должна
выполняться; HTTP_USER_AGENT – информация о браузере, который использует До сих пор мы упоминали только, что запросы
Внутри first_name=Nina, то внутри скрипта появлялась переменная $first_name со значением Nina. Если требовалось различать, каким
методом были переданы данные, то использовались ассоциативные массивы и , ключами которых являлись имена
переданных переменных, а значениями – соответственно значения этих
переменных. Таким образом, если пара first_name = Nina передана методом , то $.
Использовать в программе имена переданных переменных напрямую
небезопасно. Поэтому было решено начиная с PHP 4.1.0 задействовать
для обращения к переменным, переданным с помощью HTTP-запросов,
специальный массив – . Этот массив содержит данные,
переданные методами и , а также с помощью
Пример 4.2. Допустим, мы создали форму для регистрации участников
заочной школы программирования, как в приведенном выше примере. Тогда
в файле 1.php, обрабатывающем эту форму, можно написать следующее:
<?php
$str = "Здравствуйте,
".$_REQUEST["first_name"]. "
".$_REQUEST["last_name"]."! <br>";
$str .="Вы выбрали для изучения курс по
".$_REQUEST["kurs"];
echo $str;
?>
Тогда, если в форму мы ввели имя "Вася", фамилию "Петров" и выбрали среди всех курсов курс по PHP, на экране браузера получим такое сообщение:
Здравствуйте, Вася Петров! Вы выбрали для изучения курс по PHP
После введения массива массивы и для однородности были переименованы в и
соответственно, но сами они из обихода не исчезли из соображений
совместимости с предыдущими версиями PHP. В отличие от своих
предшественников, массивы и стали суперглобальными, т.е.
доступными напрямую и внутри функций и методов.
Приведем пример использования этих массивов. Допустим, нам нужно
обработать форму, содержащую элементы ввода с именами first_name, last_name, kurs (например, форму form.html, приведенную выше). Данные
были переданы методом , и данные, переданные другими методами, мы
обрабатывать не хотим. Это можно сделать следующим образом:
<?php
$str = "Здравствуйте,
".$_POST ["first_name"]."
".$_POST ["last_name"] ."! <br>";
$str .= "Вы выбрали для изучения курс по ".
$_POST["kurs"];
echo $str;
?>
Тогда на экране браузера, если мы ввели имя "Вася", фамилию "Петров" и выбрали среди всех курсов курс по PHP, увидим сообщение, как в предыдущем примере:
Здравствуйте, Вася Петров! Вы выбрали для изучения курс по PHP
Для того, чтобы сохранить возможность обработки скриптов более ранних
версий, чем PHP 4.1.0, была введена директива ,
разрешающая или запрещающая доступ к переменным непосредственно по их
именам. Если в , то к
переменным, переданным и , можно обращаться
просто по их именам (т.е. можно писать $first_name ). Если же , то нужно писать $ или $, $, $, $. С точки
зрения безопасности эту директиву лучше отключать (т.е. ). При включенной директиве
перечисленные выше массивы также будут содержать данные, переданные
Иногда возникает необходимость узнать значение какой-либо . Она возвращает значение
<?
echo getenv('REQUEST_METHOD');
// возвратит использованный метод
echo getenv ('REMOTE_ADDR');
// выведет IP-адрес пользователя,
// пославшего запрос
?>
Как мы уже говорили, если используется метод , то данные
передаются добавлением
getenv('QUERY_STRING');
Благодаря этому можно по методу передавать данные в каком-нибудь
другом виде. Например, указывать только значения нескольких
параметров через знак плюс, а в скрипте разбирать строку запроса на
части или можно передавать значение всего одного параметра. В этом
случае в массиве появится пустой элемент с ключом, равным этому
значению (всей + ", встретившийся в
_ ".
Методом данные передаются только с помощью форм, и пользователь
( :
getenv('HTTP_REFERER');
Теперь самое время решить задачу, сформулированную в начале лекции.
Напомним, в чем состояла задача, и уточним ее формулировку. Нужно написать форму для регистрации участников заочной школы программирования и после регистрации отправить участнику сообщение. Мы назвали это сообщение универсальным письмом, но оно будет немного отличаться от того письма, которое мы составили на предыдущей лекции. Здесь мы также не будем отправлять что-либо по электронной почте, дабы не уподобляться спамерам, а просто сгенерируем это сообщение и выведем его на экран браузера. Начальный вариант формы регистрации мы уже приводили выше. Изменим его таким образом, чтобы каждый регистрирующийся мог выбрать сколько угодно курсов для посещения, и не будем подтверждать получение регистрационной формы.
<h2>Форма для регистрации студентов</h2>
<form action="1.php" method=POST>
Имя <br><input type=text name="first_name"
value="Введите Ваше имя"><br>
Фамилия <br><input type=text name="last_name"><br>
E-mail <br><input type=text name="email"><br>
<p> Выберите курс, который вы бы хотели посещать:<br>
<input type=checkbox name='kurs[]' value='PHP'>PHP<br>
<input type=checkbox name='kurs[]' value='Lisp'>Lisp<br>
<input type=checkbox name='kurs[]' value='Perl'>Perl<br>
<input type=checkbox name='kurs[]' value='Unix'>Unix<br>
<P>Что вы хотите, чтобы мы знали о вас? <BR>
<textarea name="comment" cols=32 rows=5></textarea>
<input type=submit value="Отправить">
<input type=reset value="Отменить">
</form>
Здесь все достаточно просто и понятно. Единственное, что можно
отметить, – это способ передачи значений элемента checkbox. Когда мы
пишем в имени элемента kurs[], это значит, что первый отмеченный
элемент checkbox будет записан в первый элемент массива kurs, второй
отмеченный checkbox – во второй элемент массива и т.д. Можно,
конечно, просто дать разные имена элементам checkbox, но это усложнит
обработку данных, если курсов будет много.
Скрипт, который все это будет разбирать и обрабатывать, называется 1.php (форма ссылается именно на этот файл, что записано в ее
атрибуте ). По умолчанию используется для передачи метод ,
но мы указали . По полученным сведениям от зарегистрировавшегося
человека, скрипт генерирует соответствующее сообщение. Если человек
выбрал какие-то курсы, то ему выводится сообщение о времени их
проведения и о лекторах, которые их читают. Если человек ничего не
выбрал, то выводится сообщение о следующем собрании заочной школы
программистов (ЗШП).
<?
// создадим массивы соответствий курс-время его
// проведения и курс-его лектор
$times = array("PHP"=>"14.30","Lisp"=>"12.00",
"Perl"=>"15.00","Unix"=>"14.00");
$lectors = array("PHP"=>"Василий Васильевич",
"Lisp"=>"Иван Иванович", "Perl"=>"Петр Петрович", "Unix"=>"Семен Семенович");
define("SIGN","С уважением, администрация");
// определяем подпись письма как константу
define("MEETING_TIME","18.00");
// задаем время собрания студентов
$date = "12 мая"; // задаем дату проведения лекций
//начинаем составлять текст сообщения
$str = "Здравствуйте, уважаемый " . $_POST["first_name"]
. " " . $_POST["last_name"]."!<br>";
$str .= "<br>Сообщаем Вам, что ";
$kurses = $_POST["kurs"]; // сохраним в этой переменной
// список выбранных курсов
if (!isset($kurses)) { // если не выбран ни один курс
$event = "следующее собрание студентов";
$str .= "$event состоится $date ". MEETING_TIME . "<br>";
} else { // если хотя бы один курс выбран
$event = "выбранные Вами лекции состоятся $date <ul>";
//функция count вычисляет число элементов в массиве
$lect = "";
for ($i=0;$i<count($kurses);$i++){
// для каждого выбранного курса
$k = $kurses[$i]; // запоминаем название курса
$lect = $lect . "<li>лекция по $k в $times[$k]";
// составляем сообщение
$lect .= " (Ваш лектор, $lectors[$k])";
}
$event = $event . $lect . "</ul>";
$str .= "$event";
}
$str .= "<br>". SIGN; // добавляем подпись
echo $str; // выводим сообщение на экран
?>
Подведем итоги. Мы научились отличать
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.