Этапы создания веб-приложения. Основы РНР и MySQL
Обновлено
Этапы создания веб-приложения. Основы РНР и MySQL
- Лекция
- План
- ВВЕДЕНИЕ
- 1. Что такое веб-программирование. Основные технологии
- 1.1. Клиент-Сервер
- 1.2. HTML-формы. Методы отправки данных на сервер с помощью формы
- 1.3. Технология CGI
- 2. PHP: Препроцессор Гипертекста
- 2.1. Что такое PHP?
- 2.2. Возможности PHP
- 2.3. Почему нужно выбирать PHP
- 2.4. Недостатки PHP
- 2.5. Встраивание PHP в HTML - форму
- 2.6. HTML-формы. Массивы $_GET и $_POST
- 2.6.1. Особенности метода отправки формы POST
- 2.6.2. Особенности метода отправки формы GET
- 2.7. Функция htmlspecialchars()
- 2.8. Применение функции phpinfo() для отладки
- 3. Что такое MySQL
- 3.1. Возможности MySQL.
- 3.2. Примеры использования PHP совместно с MySQL
- 3.2.1. Работа с формами
- 3.2.2. Сохранение данных в базе данных MySQL
- 3.2.3. Получение (извлечение) данных из базы данных MySQL
- ВВЕДЕНИЕ
- Основные технологии веб-программирования. Методы отправки данных на сервер с помощью HTML-формы. PHP - Препроцессор Гипертекста. Сохранение данных в базе данных MySQL. Клиент-Сервер и технология CGI. Примеры использования PHP совместно с MySQL.
- Рассмотрим основные этапы создания web-приложения на языке PHP.
- Предполагается, что Вы знаете основы языка разметки HTML и имеете небольшой опыт программирования.
- Прежде, чем приступать к созданию web-приложения, нужно выяснить, что понимают под web - программированием.
Одно из наиболее распространенных приложений любого языка создания серверных сценариев - обработка HTML - форм. Web-программирование в большей части представляет собой обработку различных данных, введенных пользователем.
РНР облегчает задачу обработки и разбора форм, поступивших из браузера, так как в язык на самом нижнем уровне встроены все необходимые возможности. Поэтому программисту не приходится даже и задумываться над особенностями протокола HTTP и размышлять, как же происходит отправка и прием роsт-форм или даже загрузка файлов.
С HTML-формами Вы уже встречались при изучении языка разметки HTML.
Рассмотрим пример посылки сообщения из формы по электронной почте.
Листинг e_mail.html. Посылка сообщения из формы по e-mail
<html>
<head>
<title>Посылка формы по е-mail</title>
</head>
<body>
<FORM action=mailto: myaddres@mail.ru enctype=”text/plain” method=”post”>
Нажмите “Cброс” и заполните заказ.<BR>
<INPUT type=reset value=C6poc><BR>
<P>
<TABLE border=0 cellspacing=O cellpadding=5>
<TR>
<TD>Ваше имя:</TD >
<TD>
<INPUT type=text size=33 name=name value=”Прохоров Виктор Сергеевич”>
</TD>
</TR>
<TR>
<TD>Ваш адрес:</TD>
<TD>
<INPUT type=text size=33 name=email value=prohwik@mail.ru >
</TD>
</TR>
<TR>
<TD>Прислать:</TD>
<TD>
<INPUT type=text size=33 name=obj value=”Методические указания”>
</TD>
</TR>
</TABLE>
<INPUT type=submit value=”Послать заказ”>
</FORM>
</body>
</html>
Если обработать этот HTML-код браузером, то отобразится web -страница, которую можно увидеть на экране монитора:
Пользователь нажимает кнопку «Сброс», и поля принимают значения, установленные по умолчанию. Форма заполняется пользователем, и по нажатию кнопки «Послать заказ» отправляется по адресу myaddres@mail.ru. Обычно браузер не сам отсылает форму, а поручает эту работу почтовой программе, установленной по умолчанию в операционной системе компьютера (например, Outlook). Письмо посылается в виде:
subjct: Форма отправлена из Microsoft Internet Explorer
name = Прохоров Виктор Сергеевич
value=prohwik@mail.ru
obj = «Методические указания»
Письмо составляется из пар имя=значение, которые выбираются по порядку из полей формы.
Рассмотрим подробнее следующий пример.
Листинг form_1.html
<form method="GET" action="/cgi-bin/form_handler.cgi">
Введите Ваше имя: <input type="text" name="name">
<br>
<input type="submit" name="okbutton" value="OK">
</form>
Сохранив этот код в HTML-файле form_1.html и просмотрев его с помощью браузера, можно увидеть HTML-форму:
Форма реализована тегом-контейнером <form>. Тег своими атрибутами указывает:
? адрес сценария, которому будет послана форма;
? способ пересылки и характеристику данных, содержащихся в форме. Начальный <form> и конечный </form> теги задают границы формы. Их указание является обязательным.
Атрибуты тега-контейнера <form> (все необязательные):
? action --атрибут, в качестве значения которого указывают URL-адрес (полный или относительный) запрашиваемой CGI-программы. Эта программа будет обрабатывать данные, содержащиеся в форме. Допустимо использовать запись MAILTO:URL. В этом случае форма будет послана по электронной почте. Если атрибут action не указать, то содержимое формы будет отправлено на URL-адрес, с которого загружена данная web-страница, то есть "саму на себя". Это удобное сокращение, но по стандарту HTML атрибут action обязателен.
? method -- определяет метод HTTP, используемый для пересылки данных формы от браузера к серверу. Атрибут method может принимать два значения: get или post:
¦ get - отправка данных формы в адресной строке. Вы могли заметить на различных сайтах присутствие в конце URL символа "?" и следующих за ним данных в формате параметр=значение. Здесь "параметр" соответствует значению атрибута name элементов формы (см. ниже про тэг <input>), а "значение" - содержимому атрибута value (в нем, например, содержится ввод пользователя в текстовое поле того же тэга <input>).
Для примера - попробуйте поискать что-нибудь в Яндексе и обратите внимание на адресную строку браузера. Это и есть способ get.
¦ post - данные формы отправляются в теле запроса. Если не совсем понятно (или совсем непонятно), что это такое - не беспокойтесь, скоро мы к этому вопросу вернемся.
Если атрибут method не указан - подразумевается "get".
? enctype -- необязательный атрибут. Указывает тип содержимого формы, используемый для определения формата кодирования при ее пересылке. В HTML определены два возможных значения для атрибута enctype:
¦ APPLICATION/X-WWW-FORM-URLENCODED (используется по умолчанию).
¦ MULTIPART/FORM-DATA.
Тег <input> позволяет создавать внутри формы поля ввода строки текста, имени файла, пароля и др. У <input> нет конечного тега. Атрибуты и особенности использования <input> зависят от способа его использования.
Тэг <input> - задает элемент формы, определяемый атрибутом type:
¦ Значение "text" задает однострочное текстовое поле ввода.
¦ Значение "submit" задает кнопку, при нажатии которой происходит отправка формы на сервер.
Возможны и другие значения (да и <input> - не единственный тэг, задающий элемент формы), но их мы рассмотрим в следующих главах.
Итак, что же происходит, когда нажимают кнопку "OK"?
1. Браузер просматривает входящие в форму элементы и формирует из их атрибутов name и value данные формы. Допустим, введено имя Vasya. В этом случае данные формы: name=Vasya&okbutton=OK.
2. Браузер устанавливает соединение с сервером, отправляет на сервер запрос документа, указанного в атрибуте action тэга <form>, используя метод отправки данных, указанный в атрибуте method (в данном случае - GET), передавая в запросе данные формы.
3. Сервер анализирует полученный запрос, формирует ответ, отправляет его браузеру и закрывает соединение.
4. Браузер отображает полученный от сервера документ.
Отправка того же запроса вручную (с помошью telnet) выглядит следующим образом (предположим, что доменное имя сайта - www.example.com):
telnet www.example.com 80
GET /cgi-bin/form_handler.cgi?name=Vasya&okbutton=OK HTTP/1.0\r\n
Host: www.example.com\r\n
\r\n
Нажатие submit-кнопки в форме с методом отправки "GET" аналогично вводу соответствующего URL (со знаком вопроса и данными формы в конце) в адресной строке браузера: http://www.example.com/cgi-bin/form_handler.cgi?name=Vasya&okbutton=OK
На самом деле, метод GET используется всегда, когда Вы запрашиваете с сервера какой-либо документ, просто введя его URL, или щелкнув по ссылке. При использовании <form method="GET" ... >, к URL просто добавляются знак вопроса и данные формы.
Как же нам в сценарии получить строку параметров, переданную после знака вопроса в URL при обращении к сценарию? Для этого можно проанализировать переменную окружения QUERY_STRING, которая в РНР доступна под именем $_SERVER[QUERY_STRING].
Напишем пример, чтобы это проиллюстрировать (листинг qs.php).
Листинг qs.php. Вывод параметров командной строки.
<?php
echo «Данные из командной строки: $_SERVER[QUERY_STRING]»;
?>
Если теперь запустить этот сценарий из браузера (перед этим сохранив его в корневом каталоге сервера) таким образом:
http://localhost/qs.php?this+is+the+world/
то получим документ следующего содержания: Данные из командной строки: this+is+the+world
Обратите внимание на то, что URL-декодирование символов не произошло: строка $_server [' query_string '], как и одноименная переменная окружения, всегда приходит в той же самой форме, в какой она была послана браузером.
Так как РНР изначально создавался именно как язык для Web-программирования, то он дополнительно проводит некоторую работу с переменной query_string перед передачей управления сценарию. А именно, он разбивает ее по пробельным символам (в примере пробелов нет, их заменяют символы +, но эти символы РНР также понимает правильно) и помещает полученные кусочки в массив-список $argv, который впоследствии может быть проанализирован в программе.
Массив $argv используется при программировании на РНР крайне редко, что связано с большими возможностями интерпретатора по разбору данных, поступивших от пользователя. Однако в некоторых (учебных) ситуациях его применение оправдано.
Возможно, все эти технические подробности кажутся невероятно скучными и даже ненужными ("а при чем тут PHP?"). Но это основы работы по протоколу HTTP, которые необходимо знать каждому web-программисту.
Теперь заменим первую строку нашей формы на следующую:
<form method="POST" action="/cgi-bin/form_handler.cgi">
Мы указали метод отправки "POST". В этом случае данные отправляются на сервер несколько другим способом:
telnet www.example.com 80
POST /cgi-bin/form_handler.cgi HTTP/1.0\r\n
Host: www.example.com\r\n
Content-Type: application/x-www-form-urlencoded\r\n
Content-Length: 22\r\n
\r\n
name=Vasya&okbutton=OK
При использовании метода POST данные формы отправляются уже после "двух Enter-ов" - в теле запроса. Все, что выше - на самом деле заголовок запроса (и когда мы использовали метод GET, данные формы отправлялись в заголовке).
Для того, чтобы сервер знал, на каком байте закончить чтение тела запроса, в заголовке присутствует строка Content-Length; о том же, что данные формы будут переданы виде параметр1=значение1&параметр2=значение2..., причем значения передаются в виде urlencode - то есть, точно так же, как и с помощью метода GET, но в теле запроса, - серверу сообщает заголовок "Content-Type: application/x-www-form-urlencoded".
О том, что такое urlencode - чуть ниже.
Преимущество метода POST: отсутствие ограничения на длину строки с данными формы.
При использовании метода POST невозможно отправить форму, просто "зайдя по ссылке", как было с GET.
Для краткости изложения, введем термины "GET-форма" и "POST-форма", где префикс соответствует значению атрибута method тэга <form>.
При использовании POST-формы, в ее атрибуте action можно указать после знака вопроса и параметры GET-формы. Таким образом, метод POST включает в себя и метод GET.
1.3. Технология CGIМы разобрались, как создать HTML-форму, и как браузер отправляет введенные в нее данные на сервер. Но пока не понятно, что будет сервер делать с этими данными.Сам по себе web-сервер умеет только отдавать запрошенную страницу, и ничего более того, и ему все переданные данные формы, в общем-то, совершенно безразличны. Для того, чтобы можно было обработать эти данные с помощью какой-либо программы и динамически сформировать ответ браузеру, и была изобретена технология CGI (Common Gateway Interface).Взглянем на этот URL: http://www.example.com/cgi-bin/form_handler.cgi. Первое предположение, которое можно сделать на его счет, обычно такое: сервер отдает содержимое файла form_handler.cgi из каталога cgi-bin. Однако, в случае с технологией CGI дело обстоит по-другому. Сервер запускает программу form_handler.cgi и передает ей данные формы. Программа же формирует текст, который передается браузеру в качестве ответа на запрос.Программу form_handler.cgi можно написать на любом языке программирования, главное - соблюдать в программе стандарт CGI. Можно использовать, например, популярный скриптовый язык Perl. А можно написать все на Си, или на shell-скриптах... Для примера, напишем эту программу на Си. Но сначала разберемся, как происходит обмен данными между web-сервером и CGI-программой:1. Перед запуском CGI-программы, сервер устанавливает переменные окружения (Вам они наверняка знакомы по команде PATH). В каждый мало-мальски серьезном языке программирования есть средства для чтения переменных окружения. Стандарт CGI определяет весьма значительный набор переменных, которые должны быть определены перед запуском CGI-программы. Рассмотрим сейчас только три из них:REQUEST_METHOD - метод передачи данных - GET или POST (есть и другие, но пока мы их не рассматриваем)QUERY_STRING - содержит часть URL после вопросительного знака, или, другими словами, данные GET-формы.CONTENT_LENGTH - длина тела запроса (данные POST-формы).2. Сервер запускает CGI-программу. Тело запроса передается программе в виде стандартного ввода (stdin) - будто бы эти данные были введены с клавиатуры.3. Программа выдает ответ браузера на стандартный вывод (stdout) - "на экран". Этот вывод перехватывается веб-сервером и передается браузеру.Это CGI-программа на Си, выводящая содержимое полученных от web-сервера параметров форм:1. #include <stdio.h>2. #include <stdlib.h>3.4. int main(void)5. {6. // Читаем переменные среды, установленные веб-сервером7. char *query_string = getenv("QUERY_STRING");8. char *request_method = getenv("REQUEST_METHOD");9.10. char *post_data; // Буфер для данных POST-запроса11. int post_length = 0; // Длина тела запроса12.13. if (strcmp(request_method, "POST") == 0) {// Если получен POST-запрос,14. post_length = atoi(getenv("CONTENT_LENGTH")); // сначала читаем из 15. // переменной среды его длину,16. if (post_length) {// если она не нулевая,17. post_data = (char*)malloc(post_length+1); // выделяем память для буфера,18. fread(post_data, post_length, 1, stdin); // читаем со стандартного ввода тело запроса,19. post_data[post_length] = 0; // завершаем строку нулевым байтом.20. }21. }22.23. // Выводим заголовок ответа...24. printf("Content-type: text/html\r\n\r\n");25.26. // и его тело:27. printf("<h1>Здравствуйте!</h1>\r\n");28.29. if (strlen(query_string)) {30. printf("<p>Параметры GET-формы: %s\r\n", query_string);31. }32.33. if (post_length) {34. printf("<p>Параметры POST-формы: %s (длина тела запроса: %d)\r\n", post_data, post_length);35. free(post_data); // не забываем освободить выделенную в строке 17 память36. }37.38. return 0;39.}Браузер в результате получит примерно следующий код (если "засабмитить" на эту программу POST-форму из последнего примера):<h1>Здравствуйте!</h1><p>Параметры POST-формы: name=Vasya&okbutton=OK (длина тела запроса: 22) Что при этом отобразится на экране пользователя, думаю, понятно без комментариев.Как видите, даже простейшая программа вывода параметров не очень проста. Более того, по стандарту HTTP почти все не алфавитно-цифровые символы (в т.ч. и русские буквы) передаются в UrlEncoded-виде (%XX, где XX - шестнадцатеричный код символа), и, если добавить в приведенную Си-программу код расшифровки UrlEncode, она уже не поместится на экран. А это - всего лишь базовые операции. А как вырастет программа на Си, если необходимо работать с базой данных?Впрочем, написание CGI-программ на Си - довольно редкое извращение. Чаще всего это делают на Perl - языке, разработанном специально для обработки текстовых данных, а наличие модуля CGI делает написание CGI-скриптов намного более простой задачей. Здесь я не буду Вас знакомить с Perl, отмечу лишь, что проблем остается достаточно: все же Perl не предназначен для Web, это язык универсальный. Да и сама технология CGI несовершенна: при каждом обращении происходит запуск программы (в случае с Perl - интерпретатор языка), а эта операция довольно ресурсоемкая: для домашней странички Васи Пупкина производительности, конечно, достаточно, но серьезный портал с десятками и сотнями тысяч хитов в сутки потребует уже огромных аппаратных мощностей.А теперь взглянем на веб-сервер Apache. По своей природе он модульный, и позволяет подключать расширения добавлением одной строки в конфигурационный файл. Было бы прекрасно, если бы существовал скриптовый язык, заточенный именно под Web, подключаемый модулем к Apache, не так ли? Это и есть PHP.В принципе, PHP можно скомпилировать и как CGI-приложение, и использовать так же, как и Perl - но это для нестандартных web-серверов или особых извращенцев.2. PHP: Препроцессор ГипертекстаВ 1994-м году программист по имени Rasmus Lerdorf, намучавшись с классическим перловым модулем CGI, решил написать несколько Perl-скриптов, чтобы было попроще создавать свою домашнюю страницу. Такой движок был готов к началу 1995 года и назывался Personal Home Page Tools (PHP). Умел он не очень много - понимал простейший язык и всего несколько макросов.Через некоторое время понадобилось обрабатывать формы, поэтому Rasmus Lerdorf и для увеличения производительности все переписал на C. Так появился к середине 1995 года Personal Home Page/Forms Interpreter (PHP/FI) 2.0. Приставка FI - присоединилась из другого пакета Rasmusa, который умел обрабатывать формы (Form Interpritator). PHP/FI компилировался внутрь Apache и использовал стандартный API Apache. PHP скрипты оказались быстрее аналогичных CGI - скриптов, так как серверу не было необходимости порождать новый процесс. Язык PHP по возможностям приблизился к Perl, самому популярному языку для написания CGI-программ. Была добавлена поддержка множества известных баз данных (например, MySQL и Oracle). Интерфейс к GD - библиотеке, позволял генерировать картинки на лету.Труды свои Rasmus Lerdorf, следуя принципам Open Source, выложил на всеобщее обозрение, и на некотором количестве сайтов PHP/FI вполне успешно использовался, хотя был довольно примитивен. С этого момента началось широкое распространение PHP/FI.В 1997-м на PHP/FI, в поисках инструмента для удобного web - программирования, наткнулись два других программиста - Andi Gutmans и Zeev Suraski. Идея им понравилась, но функциональность и скорость работы PHP/FI оставляли желать лучшего. Zeev Suraski и Andi Gutmans решили переписать внутренний движок для исправления ошибки интерпретатора и повышения скорости выполнения скриптов. 6 июня 1998 года вышла новая версия, которая была названа PHP 3. Язык получился универсальный и мощный, и вскоре привлек внимание множества web - разработчиков: к концу 1998 года PHP3 использовался на ~10% web - серверов. К лету 1999 года PHP 3 был включен в несколько коммерческих продуктов. По данным NetCraft на ноябрь 1999 PHP использовался в более чем 1 млн. доменах.Скромное название "Personal Home Page" уже не очень-то соответствовало реальности, и название было изменено на (в лучших Unix-традициях) рекурсивное: PHP: Hypertext Preprocessor. "Движок" PHP 4, названный Zend Engine, разрабатывался усилиями уже сформировавшегося и с тех пор непрерывно разрастающегося PHP community, и в 2000-м году вышла 4-я версия PHP, ставшая менее чем через полгода стандартом для web - программирования под Unix (и не только): каждый уважающий себя хостер предоставлял поддержку PHP. Сейчас разработан PHP5, основанный на новом Zend Engine 2...2.1. Что такое PHP?PHP - это скрипт-язык (scripting language), встраиваемый в HTML - код, который интерпретируется и выполняется на web - сервере. Проще всего это показать на примере:Листинг prim_1<html> <head> <title>Вас приветствует PHP</title> </head> <body> <?phpecho "Привет Виктор Сергеевич! Учи меня!";?> </body> </html>После выполнения этого скрипта получают страничку, в которой будет написано:Основное отличие от CGI-скриптов, написанных на других языках, типа Perl или C - это то, что в CGI-программах Вы сами пишете выводимый HTML-код, а, используя PHP - вы встраиваете свою программу в готовую HTML-страницу, используя открывающий и закрывающий теги (в примере <?php и ?>).Отличие PHP от JavaScript, состоит в том, что PHP-скрипт выполняется на сервере, а клиенту передается результат работы, тогда как в JavaScript-код полностью передается на клиентскую машину и выполняется только там.Любители Internet Information Server найдут, что PHP очень похож на Active Server Pages (ASP), а энтузиасты Java скажут, что PHP похож на Java Server Pages (JSP). Все три языка позволяют размещать код, выполняемый на Web-сервере, внутри HTML страниц.2.2. Возможности PHPНа PHP можно делать все, что можно делать с помощью CGI-программ: обрабатывать данные из форм, генерировать динамические страницы, получать и посылать куки (cookies). Кроме этого в PHP включена поддержка многих баз данных (databases), что делает написание web-приложений с использованием БД до невозможности простым.Вот неполный перечень поддерживаемых БД:Adabas D | InterBase | Solid | |
dBase | mSQL | Sybase | |
Empress | MySQL | Velocis | |
FilePro | Oracle | Unix dbm | |
Informix | PostgreSQL |
|
<?php
$subj = "Запрос на информацию";
$text = "Уважаемый ".$_POST['name']."!
Спасибо за ваш интерес!
Вас интересуют ".$_POST['preference']."
Мы их распространяем бесплатно.
Обратитесь в ближайший филиал нашей компании и получите ящик этого продукта.";
mail($_POST['email'], $subj, $text);
$subj = "Поступил запрос на информацию";
$text = $_POST['name']." интересовали ".$_POST['preference']." email-адрес: ".$_POST['email'];
mail($adminaddress, $subj, $text);
?>
Вот теперь пользователь будет получать письмо с более подробной информацией о наших товарах. Также письмо получит и администратор сайта.
Когда интересующихся нашими товарами станет очень много, мы захотим их как-то упорядочить и хранить информацию о них в базе данных. Об этом в следующем примере.
3.2.2. Сохранение данных в базе данных MySQLДля начала создаем базу данных products и таблицу clients.Чтобы создать в системе базу данных, нужно войти в систему MySQL и ввести в командной строке MySQL: mysql> create database products;
База данных создана:
После этого следует набрать: mysql>use products;
Следующий этап настройки базы данных -- создание таблиц. Это делается при помощи SQL-команды CREATE TABLE:
CREATE TABLE clients
(
name VARCHAR(25),
email VARCHAR(25),
choise VARCHAR(8)
);
Таблицы базы данных созданы:
Можно просмотреть перечень таблиц созданной базы данных c помощью оператора SHOW.
Можно отобразить информацию о столбцах всех таблиц c помощью оператора DESCRIBE.
Для просмотра данных, сохраненных в каждой таблице, можно применить оператор SELEKT.
Все этапы создания базы данных с таблицами отражены на экране командной строки:
Для общения с MySQL из PHP понадобятся следующие функции:
1. Создать соединение с MySQL.
int mysql_connect(string hostname, string username, string password);
Параметры функции:
Hostname - имя хоста, на котором находится база данных.
Username - имя пользователя.
Password - пароль пользователя.
Функция возвращает параметр типа int, который больше 0, если соединение прошло успешно, и равен 0 в противном случае.
2. Выбрать базу данных для работы.
int mysql_select_db(string database_name, int link_identifier);
Параметры функции:
Database_name - имя базы данных.
link_identifier - ID соединения, которое получено в функции mysql_connect. (параметр необязательный, если он не указывается, то используется ID от последнего вызова mysql_connect)
Функция возвращает значение true или false
3. Функция выполняет запрос к базе данных.
int mysql_query(string query, int link_identifier);
Параметры функции:
Query - строка, содержащая запрос
link_identifier - см. предыдущую функцию.
Функция возвращает ID результата или 0, если произошла ошибка.
4. Функция закрывает соединение с MySQL.
int mysql_close(int link_identifier);
Параметры функции:
link_identifier - см. выше.
Функция возвращает значение true или false
Теперь файл email.php будет иметь следующий вид:
Листинг email_1.php
<?
/* Этот скрипт получает переменные из request.html */
/* Переменные для соединения с базой данных */
$hostname = "localhost";
$username = "myusername";
$password = "mypassword";
$dbName = "products";
/* Таблица MySQL, в которой хранятся данные */
$userstable = "clients";
/* email администратора */
$adminaddress = "administration@me.com";
/* создать соединение */
mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение ");
/* выбрать базу данных. Если произойдет ошибка - вывести ее */
mysql_select_db($dbName) or die(mysql_error());
echo "<CENTER>";
echo "Привет, ".$_POST['name'];
echo "<BR><BR>";
echo "Спасибо за ваш интерес.<BR><BR>";
echo "Вас интересуют ".$_POST['preference'].". Информацию о них мы пошлем вам на email: ".$_POST['email'];
echo "</CENTER>";
/* Отправляем email-ы */
$subj = "Запрос на информацию";
$text = "Уважаемый ".$_POST['name']."!
Спасибо за ваш интерес!
Вас интересуют ".$_POST['preference']."
Мы их распространяем бесплатно.
Обратитесь в ближайший филиал нашей компании и получите ящик этого продукта.";
mail($_POST['email'], $subj, $text);
$subj="Поступил запрос на информацию";
$text = $_POST['name']." интересовали ".$_POST['preference']." email-адрес: ".$_POST['email'];
mail($adminaddress, $subj, $text);
/* составить запрос для вставки информации о клиенте в таблицу */
$query = "INSERT INTO $userstable VALUES('$name','$email', '$preference')";
/* Выполнить запрос. Если произойдет ошибка - вывести ее. */
mysql_query($query) or die(mysql_error());
echo "Информация о вас занесена в базу данных.";
/* Закрыть соединение */
mysql_close();
?>
Вот так можно работать с базой данных в PHP. Теперь кроме письменных уведомлений, информация о клиенте и его интересах будет заноситься в таблицу MySQL.
3.2.3. Получение (извлечение) данных из базы данных MySQLПосле занесения данных, нас иногда будет интересовать вопрос: так кого же из наших клиентов интересует товар “Яблоки”Напишем скрипт apple.php.Листинг apple.php<?/* Скрипт показывает клиентов, которые яблоки любят больше чем апельсины *//* Переменные для соединения с базой данных */$hostname = "localhost";$username = "myusername";$password = "mypassword";$dbName = "products";/* Таблица MySQL, в которой хранятся данные */$userstable = "clients";/* создать соединение */mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение ");/* выбрать базу данных. Если произойдет ошибка - вывести ее */mysql_select_db($dbName) or die(mysql_error());/* составить запрос, который выберет всех клиентов - яблочников */$query = "SELECT * FROM $userstable WHERE choise = 'Яблоки'";/* Выполнить запрос. Если произойдет ошибка - вывести ее. */$res = mysql_query($query) or die(mysql_error());/* Как много нашлось таких */$number = mysql_num_rows($res);/* Напечатать всех в красивом виде*/If ($number == 0) {echo "<CENTER><P>Любителей яблок нет</CENTER>";} else {echo "<CENTER><P>Количество любителей яблок: $number<BR><BR>";/* Получать по одной строке из таблицы в массив $row, пока строки не кончатся */while ($row=mysql_fetch_array($res)) {echo "Клиент ".$row['name']." любит Яблоки.<BR>";echo "Его Email: ".$row['email'];echo "<BR><BR>";}echo "</CENTER>";}?>Вот и все, продукт практически готов.