|
||||||||||||
|
||||||||||||
|
|||||||||
МЕНЮ
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА - РЕФЕРАТЫ - Этапы создания веб-приложения. Основы РНР и MySQLЭтапы создания веб-приложения. Основы РНР и MySQLЭтапы создания веб-приложения. Основы РНР и MySQL
Одно из наиболее распространенных приложений любого языка создания серверных сценариев - обработка 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-приложений с использованием БД до невозможности простым.Вот неполный перечень поддерживаемых БД:
<?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>";}?>Вот и все, продукт практически готов. |
РЕКЛАМА
|
||||||||||||||||||||||||||||||||||||||
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА | ||
© 2010 |