Лекция: Задание 5. Создание WEB-объектов
Клиентские методы HTTP
В HTTP метод клиента определяет запрос, отправленный от Web-клиента, либо РНР-сценария, HTTP-серверу. Существуют три основных типа запросов:
GET-запросы. Когда вы хотите только получить информацию от источника HTTP, то можете сделать это методом GET. Получить информацию можно из файла, либо от исполняемой программы на Web-сервере с указанным URL-адресом. Привлекательность HTTP состоит в том, что запрос GET делает выполнение программы таким же простым, как извлечение файла.
POST-запросы. Когда вы хотите отправить информацию от клиента Web-серверу, то используете запрос POST. Обычно это имеет место, когда вы отправляете содержимое Web-формы Web-серверу.
HEAD-запросы. Когда вы хотите получить информацию о запрошенном URL, но не информацию самого URL, то используете запрос HEAD.
По методу GET контент запроса посылается через поля формы или через строку URL, по методу POST – через поля формы. Запросы можно создать и отправить вручную с помощью средств JavaScript, а получить обратно с помощью методов PHP.
Простой способ просмотреть HTTP запросы и ответы состоит в установке плагина для браузера Firefox, который называется HttpFox и доступен для свободного скачивания.
Ниже приведен пример работы HttpFox для сервера localhost.
Обработка HTML-форм
Одно из главнейших достоинств PHP – это реализация возможности работы с формами HTML. Формы используется почтовыми службами, электронными магазинами и многими другими типами сайтов. Формы – удобный способ получения информации от посетителей сайта. Пример тому – гостевая книга, – которая обеспечивает обратную связь с посетителями и разработчиками сайта.
Формой называется конструкция, состоящая из поименованных элементов, заключенных между HTML-тэгами <form...> n</form>. В качестве элементов формы могут выступать поля ввода текста, кнопки, выпадающие меню, переключатели, квадратики для отметки галочкой checkbox, а также картинки формата jpg или gif. Каждый элемент формы может иметь свое имя. При этом каждый элемент клиентской формы может пересылаться на сервер и становится доступен серверным программам на PHP.
Наиболее важным свойством формы является то, что в ее заголовке в открывающем тэге <form...> можно указать адрес какого-либо файла. В этом случае при загрузке этого файла в программный код, если он будет там присутствовать, передадутся значения всех переменных, установленных в этой форме, в частности, значения всех элементов формы, как если бы эти значения были установлены в программе, расположенной в самом загружаемом файле. Таким образом, можно передавать значения переменных между различными web-страницами, используя их в программном коде.
Если в конфигурационном файле РНР — php.ini — параметр register_globals установлен в on, имена передаваемых переменных соответствуют тем именам, которые были даны элементам формы, а значения — соответственно значениям этих элементов: для поля ввода текста — введенному тексту, для переключателя или checkbox — True при отмеченном и False при неотмеченном, для рисунка — координаты указателя мыши относительно верхнего левого угла изображения. Кроме того, переменные, передаваемые через форму, помещаются в ассоциативные массивы $_POST_ или $_GET. Содержимое поля ввода текста <input type=text name=’myname’ size=30> окажется в элементе $_POST['myname']) или $_GET['myname']). Различие между двумя методами состоит в том, что при передаче данных методом GET эти данные отображаются в адресной строке браузера, а при использовании метода POST — нет. Переменные $_POST и $_GET доступны и во всех функциях, расположенных в программе РНР, т. е. являются глобальными. Способ передачи данных через глобальные переменные является основным, поскольку в последних версиях PHP register_globals установлен в off по умолчанию. Ниже показаны обычно используемые суперглобальные переменные PHP: $_GET[], $_POST[], $_REQUEST[], $_COOKIE[], $_FILES[], $_SERVER[], $_ENV[], $_SESSION[].
Передача переменных в скрипт.
PHP скрипты используются для обработки на сервере полей форм, которые задаются на клиенте. Форма содержит тэги и атрибуты:
<form name=«имя_формы» action=«путь_к_обработчику»
method=«метод_передачи_переменных GET или POST „>
поля ввода...
</form>
Обработчик — это скрипт на сервере, в который будут переданы значения полей ввода. Каждое поле ввода имеет имя, задаваемое атрибутом name и передается в обработчик вместе со своим значением. Рассмотрим пример:
<form action=“action.php» method=«POST»>
Ваше имя: <input type=«text» name=«name» />
Ваш возраст: <input type=«text» name=«age» />
Пароль:<input type=«text» name=«password» />
<input type=«submit»>
</form>
Когда пользователь заполнит форму и нажмет кнопку отправки submit, будет вызван обработчик action.php. В этом файле может быть:
<html><body>Здравствуйте,
<?php
echo $_POST[«name»];
?>.
Вам <?php echo $_POST[«age»]; ?> лет.
Пароль:<?php echo $_POST[«password»]; ?>
</body></html>
Вывод:
Здравствуйте, Егор.Вам 20 лет. Пароль:******
Метод отправки формы — POST. Переменные The $_POST[«name»] и $_POST[«age»] автоматически установлены в значения из формы средствами PHP. Если бы мы использовали метод GET, то информация нашей формы была бы в суперглобальной переменной $_GET. Также можно использовать переменную $_REQUEST, если источник данных не имеет значения. Эта переменная содержит смесь данных GET, POST, COOKIE и FILE.
Передача значений переменных по методу GET
При использовании метода GET все данные упаковываются в адресную строку. Причем происходит это следующим образом: вначале имена переменных и их значения преобразуются в вид, безопасный для передачи в строке URL (особенно хорошо это заметно, когда передаются русские символы), после чего все данные преобразуются в форму name=value и собираются в одну строку, отделяясь друг от друга знаком & (амперсанд). Происходит это таким образом:
site.domain/action.php?имя=значение&имя=значение
Пары «имя=значение» создаются для каждого элемента ввода, для которого указано имя атрибутом NAME.
В таком виде данные и попадают скрипту, который уже самостоятельно должен проделать обратную операцию и извлечь из строки названия переменных и их значения. Строка запросаможет содержать не более 254 символов. Это одно из ограничений метода GET, которое не позволяет передавать объемные данные.
В отличие от других серверных языков программирования, PHP делает всю нудную работу по расшифровке строки запроса, переданной методом GET, на себя и предоставляет нам уже готовые для использования в скрипте переменные. Причем имя переменной образуется из имени, указанного в соответствующем элементе формы. Если пользователь ввел в строке $name запроса имени «Гриня», то в скрипте автоматически появится переменная $name, которая будет иметь значение «Гриня».
По определению, все данные, передаваемые этим способом, доступны всем и могут быть прочитаны кем угодно. Поэтому им не рекомендуется пользоваться для передачи секретной информации — например паролей.
Рассмотрим пример передачи данных через строку URI:
<!—pr421.php -->
<html>
<head> </head>
<body>
<?php //
$a =$_GET['a'];
$b =$_GET['b'];
$c++;//Если режим on включен. Следует сначала написать $с =$_GET['с'];
echo «a=$a,b=$b»; //
print "<br>c=$c";//
echo "<br> <a href='pr421.php?a=1&b=2&c=3'> новая передача</a>"
?>
</body>
</html>
Получим после запуска вида:
localhost/MyPrimers/pr421.php?a=10&b=20&c=30
a=10,b=20
c=31
новая передача
Если нажмем на гиперссылку новая передача, получим
a=1,b=2
c=4
новая передача
Передача данных из клиентской формы на сервер по методу GET
<html><head>
<title>Simpleform.html </title>
</head>
<body>
<form action=«form.php» method=«GET»>
Имя:<input type=«text» name=«fio»><p>
<input type=«submit» value=«GO»><p>
</form>
</body>
</html>
<?php //form.php
echo «Hello, $fio<br>»;
foreach($_GET as $fio=>$value);
echo "$fio=$value<br>";
print_r ($_GET);
print_r ($_REQUEST);
?>
Результат:
Hello,valera
fio=valera
Array ( [fio] => valera ) Array ( [fio] => valera )
Передача данных из клиентской формы на сервер по методу POST
Метод POST, в отличие от GET, передает все данные на стандартный вывод. Соответственно, и ограничений на длину информации нет.
Какой же из этих методов лучше? Это зависит от конкретной ситуации. Для передачи информации, вводимой в форме, в большинстве случаев лучше подходит метод POST. А вот в случае динамических сайтов, когда показываемая страничка определяется не только адресом странички, но и переменными (типичный представитель — интернет-магазин), лучше использовать метод GET.
Кроме простого задания переменной в форме, PHP позволяет использовать для этой цели и массивы. В этом случае код нашей формы будет выглядеть вот так:
<form action=«formmail.php» method=«post»>
Ваше имя:
<input type=«text» name=«user[name]»><br>
Электронный адрес:
<input type=«text» name=«user[email]»> <br>
Сообщение:
<textarea name=«user[message]»></textarea><br>
<input type=«submit» value=«Отправить»>
</form>
Теперь все введенные пользователем данные будут находиться в массиве $user, что очень удобно для больших форм и передачи множества данных в функцию.
Задание состоит в выделении и создании основных объектов web страницы:
Admin, Новости, Форумы, Голосование, Счетчики, Информация о посетителе, Анкета, Гостевые книги, Форумы, Баннеры, Ссылки и каталоги ссылок, Чаты и общение, Электронная почта, Открытки, Статистика, Защита, Игры, Мультимедия и музыка, Тесты и викторины, Доски объявлений, Знакомства, обратная связь, галерея, календарь, рассылка/авторассылка и т.д.
Для используемых форм предусмотреть обязательные для заполнения поля формы. Выполнить проверку числовых или строковых полей на клиенте и на сервере. Для проверки данных использовать JavaScript или PHP.
Для хранения информации предусмотреть использованиеa) файл b)БД MySql.
Список заданий
1. Загрузка файла на сервер. Просмотр каталога из клиентской формы. Выбор файла и загрузка на сервер
2. Система отправки писем Send Mail. Отправка e-mail. E-mail с вложенными файлами. Интерфейс:
— Имя.
— e-mail.
— Отправить.
— Обратная связь или «контакты».
3. Рекомендация другу. На указанный e-mail оправляется письмо со ссылкой и рекомендациями, подписанные вами.
4. Система рассылки SMS — сообщений. Поддержка мобильной связи.
5. Система рассылки ICQ — сообщений.
6. Получение информации о клиенте и сервере.
7. Регистрация на сайте. Заполнить регистрационную форму: Фамилия, Имя, Город, E-Mail, login.
Система должна сгенерировать уникальный password. После регистрации отослать password по E-Mail.
8. Авторизация посетителя на сайте (логин, пароль, смена пароля и т.д.).
9. Счетчик посещений Counter – текстовый и графический.
10. HTTP Аутентификация и приветствие зарегистрированного клиента.
Интерфейс: Не видели Вас две недели Сэр. Рады видеть Вас снова на нашем сайте.
11. Удаленный web-counter. Необходимо реализовать службу наподобие RAMBLER:TOP100. Интерфейс: пользователь регистрируется и получает идентификатор. Таким образом он связывает свою страницу с сервером- носителем web-couter-а. После этого служба должна вести учет посетителей страницы пользователя.
Необходимо осуществить администраторские функции по включению и исключению произвольного пользователя администратором.
12. Откуда заходят посетители или поисковые машины. Адрес, IP- адрес, государство.
13. Подсчет on-line посетителей на сайте.
14. Администрируемая Гостевая книга.
— Имя:
— e-mail:
— Сайт:
— Город:
— Сообщение:
— Отправить
Интерфейс: пользователь заходит на страницу гостевой книги, на которой он сможет ввести сообщение, а также просмотреть сообщения оставленные другими пользователями. Создать две кнопки “Ввести” и “Просмотреть”.
Должны быть выполнены такие администраторские функции как включение и исключение сообщения в гостевой книге, запрет и управление запретом на включение сообщения содержащее определяемые администатором выражения, запрет и управление запретом на включение сообщения с заданных администатором хостов.
Помимо указанных пунктов можно предусмотреть:
1. Ответ администратора
2. Шаблон вывода.
3. Фильтр слов.
4. Смайлы
15. Голосование.
Интерфейс:
Как жизнь?
.Отлично
.Хорошо
.Средне
.Плохо
.Хуже плохого