Розглянемо основні етапи створення web-додатки на мові PHP. Передбачається, що Ви знаєте основи мови розмітки HTML і маєте невеликий досвід програмування. Перш, ніж приступати до створення web-додатку, потрібно з'ясувати, що розуміють під веб - програмуванням.
Коли Ви програмували, наприклад, на Delphi, Visual Basic, або Visual C ++, то звикли до такої схеми роботи програми: натискаєте кнопку на клавіатурі виконується код виводиться результат. Все це виконується на одному комп'ютері. У web -програмування все йде по-іншому.
Коли Ви вводите в адресному рядку браузера URL (Universal Resource Location, або в просторіччі - адреса) відбувається наступне:
Ще до того, як Ви побачили на екрані запитану сторінку, з'єднання з сервером закрито, і він про Вас забув. І коли Ви введете інший (або той же самий) адреса, або оберіть пункт, або натиснете на кнопку HTML-форми - та ж схема повториться знову.
Таку схему роботи називають "клієнт-сервер". Клієнт в даному випадку - браузер.
З'єднання з web-серверів триває проміжок часу між клацанням по посиланню (або іншим способом запиту) і початком відображення web-сторінки. Більшість браузерів під час з'єднання відображають індикатор, наприклад, індикатор MS Internet Explorer відображає анімацію в правому верхньому куті.
Уважний студент може помітити - а як же так, я вже читаю сторінку, а індикатор все ще показує процес з'єднання? Справа в тому, що тег <img src = ...> (завантаження зображення) і деякі інші теги HTML - коду - це ще один запит до сервера. Виконується він точно так само, як і будь-який інший запит - по тій же схемі.
Щоб назавжди позбутися від сприйняття HTTP як "чорного ящика", "прикинемося" браузером за допомогою telnet'а:
1. Запустимо telnet www.php5.loc 80
2. Введемо в вікні терміналу наведені нижче дії (введення не відображається - нічого страшного):
GET / HTTP / 1.0 [тут натиснемо Enter]
Host: www.php5.ru [тут натиснемо Enter двічі] Натискання Enter відповідає, як правило, комбінації символів CR + LF, що позначаються як \ r \ n. Далі буде використовуватися саме це позначення.
По екрану монітора пробіжить HTML-код сторінки http://www.php5.loc/.
HTML-код поточної сторінки можна переглянути практично в будь-якому браузері, вибравши в меню "Вид | Перегляд HTML-коду".
Картинки, фрейми - це додаткові пропозиції: при обробці (парсінгу) HTML-коду, браузера, натискання на тег <img src = "картинка"> здійснює додатковий запрос на сервер - запрошення на зображення та відображення його на сайті, де стоїть тег <img ...>.
Введіть:
telnet www.php5.loc 80
GET /php/php5.loc.png HTTP / 1.0 \ r \ n
Ведучий: www.php5.ru \ r \ n \ r \ n
На екрані пробежіть те, що, якщо ви вийдете, якщо ви проглянете цей png-файл у текстовому редакторі.
Одним з найпоширеніших додатків будь-якої мови створення серверних сценаріїв - обробка HTML - форм. Веб-програмування в більшій частині представляє собою обробку різних даних, введених користувачем.
РНР обробляє завдання обробки та розробки форм, що входять в браузер, так як у мові на самому нижньому рівні встроєні всі необхідні можливості. Тому програма не може надходити навіть і задумуватися над особливостями протоколу HTTP і розмисляти, як відбувається відправка та прийом рост-форм або навіть завантаження файлів.
З HTML-формами Ви вже зустрічалися при вивченні мови розмітки HTML. {{1} } Рассмотрим приклад посилання повідомлень із форм за електронною поштою.
Лістинг e_mail.html. Посилка повідомлень із форм по електронній пошті
<html>
<head>
<title> Посилка форм за електронною поштою </title>
</ head >
<body>
<form action = mailto: (прихована) enctype = ”text / plain” method = ”post”>
Натисни & # 147; Скидання & # 148; і запвнити форму замовлення. <BR>
<INPUT type = reset value = C6poc> <BR>
<P>
<TABLE border = 0 cellpacing = O cellpadding = 5> { {1}} <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 (приховано)>
</TD>
</TR>
<TR> { {1}} <TD> Прислати: </TD>
<TD>
<INPUT type = text size = 33 name = obj value = ”Методичні вказівки”>
< / TD>
</TR>
</TABLE>
<INPUT type = submit value = ”Надіслати замовлення”>
</FORM>
</body>
</html>
При використанні методу POST дані форми відправляються вже після "двох Enter-ів" - у телепрограмі. Все, що вище - на самому делегуванні заголовок запрошення (і коли ми використовували метод GET, дані форми передавались у заголовки).
Для того, щоб знати сервер, на якому байті закінчити читання тіла запрошення, в заголовку присутній рядок Вміст -Довжина; о том же, що дані форми будуть передані бачити параметр1 = значення1 & параметр2 = значення2 ..., причому значення передаються у відео urlencode - це є, точно так же, як і за допомогою методу GET, ні в телепрограмі, - сервер повідомляє заголовок " Тип вмісту: application / x-www-form-urlencoded ".
Про те, що таке urlencode - чути нижче.
Перевага методу POST: відсутність обмежень на тривалість строків з даними формами.
При використанні методу POST неможливо відправити форму, просто "зайшовши за посиланням ", як було з GET.
Для коротких викладів, введених терміни" GET-форма "та" POST-форма ", де префікс відповідає значенню методу атрибути тегу <form>.
При використанні POST -форми, в її атрибуті дію можна вказати після знаку питання та параметри GET-форми. Таким чином, метод POST включає себе та метод GET.
Ми розібралися, створивши HTML-форму та браузер, що відправляє введені дані в сервер. Не покажемо поняття, що буде робити сервер з цими даними.
Сам по собі веб-сервер вміє лише віддавати запрошену сторінку, і нічого більшого, а також усі передані дані, в загальному, повністю байдужі . Для того, щоб можна було обробити ці дані за допомогою будь-якої програми та динамічно сформувати відповідь браузера, а також було винаходом технології 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. Можна написати все на Си, або на оболонці-скриптах ... Для прикладу, напишіть цю програму на Сі. Нічого не розпочалось, як відбувається обмін даними між веб-сервером та CGI-програмою:
Перед запуском CGI-програми сервер встановлює перемінні оточення (Вам скоріше всього знайомі за командою PATH). У кожному більш-менш серйозній мові програмування є засоби для читання перемінних оточення.Стандарт CGI визначає весь значущий набір змінних, які повинні бути визначені перед запуском CGI-програм. Розглянемо наразі тільки три з них:
Сервер запускає CGI-програму. Тіло запрошення передається в стандартному введенні (stdin) - тому, що ці дані були введені з клавіатури.
Програма видає відповідь браузера на стандартний вивід (stdout) - "на екран". Цей вивід перехоплюється веб-сервером і передається браузеру.
Це CGI-програма на Сі, що виводить вміст, отриманий з параметрів веб-сервера:
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 ("Тип вмісту: text / html \ r \ n \ r \ n");
25.
26. // та його тіло:
27. printf ("<h1> Привіт! </h1> \ r \ n");
28.
29. if (strlen (рядок_запиту)) {
30. printf ("<p> Параметри GET-форми:% s \ r \ n", рядок_запиту);
31. }
32.
33. if (post_length) {
34. printf ("<p> Параметри POST-форм:% s (довжина тіла запрошення:% d) \ r \ n", post_data, post_length);
35. безкоштовно (post_data); // не забуваємо звільнити вділений в рядок 17 пам'ять
36. }
37.
38. повернути 0;
39.}
Браузер в результаті отримує приблизно наступний код (якщо надіслати на цій програмі POST-форму з останньої пропозиції):
<h1> Привіт! </h1>
<p> Параметри POST-форм: name = Vasil & okbutton = OK (довжина тіла запрошення: 22)
Що при цьому відображається на екрані користувача, думаю, зрозуміло без коментарів.
Як ви бачите, навіть простіша програма виводу параметрів не дуже проста. Більше того, за стандартом HTTP майже всі не алфавітно-цифрові символи (в т.ч. та російські букви) передаються в UrlEncoded-vide (% XX, де XX - шістнадцятирічний код символу), і, якщо додати в приведену C-програму код розшифровки UrlEncode, вона вже не розміщується на екрані. А це - всього лише базові операції. Як виразити програму на Сі, якщо потрібно працювати з базовими даними?
Проте, написання CGI-програми на Сі - досить рідке вираження. Ще більше всього цього роблять на Perl - мова, розроблена спеціально для обробки текстових даних, а наявність модуля CGI робить написання CGI-скриптів більшого простого завдання. Тут я не буду Вас знайомити з Perl, зазначаючи лише те, що проблема залишається достатньо: все, що Perl не призначено для Інтернету, це універсальний мова. Так і сама технологія CGI не відповідає: при кожному вихованні відбувається запуск програм (на випадок Perl - інтерпретатор мови), а рівень операції досить ресурсомісткий: для домашніх сторінок Василя Петренка продуктивність, конечно, достатньо, але серйозний портал з десятками та сотнями тисяч хітів на добу потребують вже величезних апаратних потужностей.
Тепер виглядає веб-сервер Apache. За своєю природою він модульний і дозволяє підключити розширення додавання одних строків у конфігураційний файл. Коли було прекрасно, якщо істотою був створений скриптовий мову, заточений саме під Web, підключений модуль до Apache, чи не так? Це і є PHP.
В принципі, PHP можна скомпілювати і як CGI-додаток, і використовувати так же, як і Perl - це не для нестандартних веб-серверів або особистих збочень.
У 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 ...
На PHP можна робити все, що можна робити за допомогою CGI-програм: обробляти дані з форм, генерувати динамічні сторінки, одержувати і посилати куки (cookies). Крім цього в PHP включена підтримка багатьох баз даних (databases), що робить написання web-додатків з використанням БД до неможливості простим.
Ось неповний перелік підтримуваних БД:
Adabas D |
InterBase |
Solid |
dBase |
mSQL |
Sybase |
Empress |
MySQL |
Velocis |
FilePro |
Oracle |
Unix dbm |
Informix |
PostgreSQL |
|
Додатково до всього PHP розуміє протоколи IMAP, SNMP, NNTP, POP3 і навіть HTTP, а також має можливість працювати з сокетами (sockets) і спілкуватися по інших протоколах.
Розробникам web-додатків немає необхідності говорити, що web-сторінки - це не тільки картинки і текст. Гідний уваги сайт повинен підтримувати досить високий рівень інтерактивності з користувачем: пошук інформації, продаж продуктів, конференції тощо.
Традиційно все це реалізувалося CGI-скриптами, написаними на Perl. Але CGI- скрипти дуже погано масштабуються. Кожен новий виклик CGI, вимагає від ядра породження нового процесу, а це займає процесорний час і витрачає оперативну пам'ять.
PHP пропонує інший варіант - він працює як частина web-сервера, і цим самим схожий на ASP від Microsoft. синтаксис PHP дуже схожий на синтаксис C або Perl. Люди, знайомі з програмуванням, дуже швидко починають писати програми на PHP. У цій мові немає строгої типізації даних і немає необхідності в діях по виділенню / звільненню пам'яті.
Програми, написані на PHP, легко читані. PHP - код легко візуально прочитати і зрозуміти, на відміну від Perl-програм.
PHP є мовою, що інтерпретується, і як наслідок цього, не може зрівнятися по швидкості з компільовані С. Однак при написанні невеликих програм, що і властиво проектам на PHP, коли весь проект складається з багатьох невеликих сторінок з кодом, набирають чинності накладні витрати на завантаження в пам'ять і виклик CGI-програми, написаної на с.
Чи не така велика база готових модулів, як, наприклад, СPAN у Perl. З цим нічого не можна вдіяти - це справа часу. У PHP 4 розроблювачі передбачили спеціальний репозиторій PEAR, аналогічний CPAN, і, звичайно, дуже скоро буде написано достатню кількість модулів для його наповнення.
Функція htmlspecialchars ()
Чи не знайшли? Я підкажу. Введіть, наприклад, в поле "ім'я" подвійні лапки і який-небудь текст, наприклад, "123. Надішліть форму, і погляньте на вихідний код отриманої сторінки. У четвертому рядку буде щось на зразок:
Введіть Ваше ім'я : <input type = "text" name = "name" value = "" 123 ">
Тобто - нічого хорошого. А якби хитрий користувач ввів JavaScript-код?
Для вирішення цієї проблеми необхідно скористатися функцією htmlspecialchars (), яка замінить службові символи на їх HTML-уявлення (наприклад, лапки - на "):
Лістинг form_7.php
<html>
<body>
<?
$ name = isset ($ _ POST [ 'name'])? htmlspecialchars ($ _ POST [ 'name']): '';
$ year = isset ($ _ POST [ 'year'])? htmlspecialchars ($ _ POST [ 'year']): '';
if (isset ($ _POST [ 'name'], $ _POST [ 'year'])) {
if ($ _POST [ 'name'] == '') {
echo 'Вкажіть ім'я! < br> ';
} else if ($ _POST [' year '] <1900 || $ _POST [' year ']> 2004) {
echo' Вкажіть рік народження! Допустимий діапазон значень: 1900..2004 <br> ';
} else {
echo' Привіт '. $ name.'! <br> ';
$ age = 2004 - $ _POST [ 'year'];
echo 'Вам'. $ age. 'років <br>';
}
echo '<hr>';
}
?>
<form method = "post" action = "<? = $ _ SERVER [ 'PHP_SELF']?>">
Введіть Ваше ім'я: <input type = " text "name =" name "value =" <? = $ name?> ">
<br>
Введіть Ваш рік народження: <input type = "text" name = "year" value = "<? = $ year?>">
<input type = "submit" value = "OK">
</ form>
</ body>
</ html>
Запам'ятайте - функцію htmlspecialchars () необхідно використовувати завжди, коли виводиться вміст змінної, в якій можуть бути присутніми спецсимволи HTML.
Застосування функції phpinfo () для налагодження
Функція phpinfo () - одна з найважливіших в PHP. Вона виводить інформацію про налаштування PHP, значення всіляких конфігураційних змінних ...
Чому вона згадується в розділі, присвяченому формам? Тому що функція phpinfo () - зручне засіб налагодження.
Функція phpinfo (), крім іншого, виводить значення всіх $ _GET, $ _POST і $ _SERVER - змінних.
Так що, якщо змінна форми " загубилася ", найпростіший спосіб виявити, в чому справа - скористатися функцією phpinfo (). Для того, щоб функція виводила тільки значення змінних (і Вам не довелося прокручувати десяток сторінок), її слід викликати наступним чином:
phpinfo (INFO_VARIABLES);
або - що абсолютно те ж саме: {{ 1}} phpinfo (32);
Лістинг form_8.php
<html>
<body>
<form method = "post" action = "<? = $ _ SERVER [ 'PHP_SELF']?> ">
Введіть Ваше ім'я: <input type =" text "name =" name ">
<input type =" submit "value =" OK ">
</ form>
<?
phpinfo (32);
?>
</ body>
< / html>
Або, наприклад, така ситуація: ви хочете дізнатися IP-адреса відвідувача. Ви пам'ятаєте, що відповідна змінна зберігається в масиві $ _SERVER, але - ось невдача - забули, як саме змінна називається. Знову ж, викликаємо phpinfo (32) ;, шукаємо в табличці свій IP-адресу і знаходимо його - в рядку _SERVER [ "REMOTE_ADDR"]:
MySQL - компактний багатопотоковий сервер баз даних. MySQL характеризується великою швидкістю, стійкістю і легкістю у використанні.
MySQL був розроблений компанією TcX для швидкої обробки дуже великих баз даних. Компанія стверджує, що використовує MySQL з 1996 року на сервері з більш ніж 40 БД, які містять 10.000 таблиць, з яких близько 500 мають більше 7 мільйонів рядків (24.01.2004).
MySQL є ідеальним рішенням для малих і середніх додатків. Вихідні тексти сервера компілюються на безлічі платформ. Найбільш повно можливості сервера проявляються на Unix-серверах, де є підтримка багато поточності, що дає значний приріст продуктивності.
На поточний момент MySQL усе ще в стадії розробки, хоча версії 3.22 і більш пізні повністю працездатні.
MySQL-сервер є безкоштовним для некомерційного використання. Для комерційного використання необхідно придбати ліцензію, вартість якої становить 190 EUR.
MySQL підтримує мову запитів SQL у стандарті ANSI 92, і крім цього має безліч розширень до цього стандарту, яких немає в жодній іншій СУБД.
Короткий перелік можливостей MySQL:
За словами творців саме ці пункти дали можливість досягти високої швидкодії. Їх реалізація істотно знижує швидкість сервера. Ці можливості не є критичними при створенні web-додатків, що в поєднанні з високою швидкодією і малою ціною дозволило серверу набути велику популярність.
Цей приклад демонструє як в PHP легко обробляти дані з HTML - форм.
Створимо HTML файл request.html.
Лістинг request.html
<HTML>
< HEAD>
<TITLE> Запит інформації </ TITLE>
<BODY>
<CENTER>
Хочете більше знати про наші товари?
< P>
<TABLE WIDTH = 400> <TR> <TD align = right>
<FORM ACTION = "email.php" METHOD = "POST">
Ваше ім'я: <BR> <INPUT TYPE = "text" NAME = "name" SIZE = "20" MAXLENGTH = "30">
<P>
Ваш email: <BR> <INPUT TYPE = " text "NAME =" email "SIZE =" 20 "MAXLENGTH =" 30 ">
<P>
Мене цікавлять:
<SELECT NAME =" preference "> {{1 }} <OPTION value = "Яблука"> Яблука
<OPTION value = "Апельсини"> Апельсини
</ SELECT>
<P>
<INPUT TYPE = "submit" VALUE = "Відправити запит!">
</ FORM>
</ TD> </ TR> </ TABLE> </ CENTER>
</ BODY >
</ HTML>
У файлі request.html зазначено, що дані форми будуть оброблятися файлом email.php. Наведемо його зміст:
Лістинг email.php
<?
/ * Цей скрипт одержує змінні з request.html * /
PRINT "<CENTER>"; { {1}} PRINT "Привіт,". $ _ POST [ 'name'];
PRINT "<BR> <BR>";
PRINT "Спасибі за ваш інтерес. <BR> <BR > ";
PRINT" Вас цікавлять ". $ _ POST [ 'preference'].", інформацію про них ми пошлемо вам на email: ". $ _ POST [ 'email'];
PRINT" </ CENTER> ";
?>
Тепер, якщо користувач викличе request.html і набере у формі ім'я" Микола ", email: (hidden) і скаже, що його цікавлять" Яблука ", а після цього натисне "Відправити запит!",
то у відповідь викликається email.php, який виведе на екран приблизно наступне:
Привіт, Микола
Дякую за ваш інтерес.
Вас цікавлять Яблука. Інформацію про них ми пошлемо вам на email: mykola@mycola.com
Коли цікавляться нашими товарами стане дуже багато, ми захочемо їх якось упорядкувати і зберігати інформацію про них в базі даних. Про це в наступному прикладі.
Для початку створюємо базу даних products і таблицю clients.
Щоб створити в системі базу даних, потрібно увійти в систему MySQL і ввести в командному рядку MySQL: mysql> create database products ;
База даних створена:
Після цього слід набрати: mysql> use products;
Наступний етап налаштування бази даних - створення таблиць. Це робиться за допомогою SQL-команди CREATE TABLE:
CREATE TABLE clients
(
name VARCHAR (25),
email VARCHAR (25), {{1} } choise VARCHAR (8)
);
Таблиці бази даних створені:
Ви можете переглянути перелік таблиць створеної бази даних c допомогою оператора SHOW.
Можна відобразити інформацію про шпальтах всіх таблиць c допомогою оператора DESCRIBE.
Для перегляду даних, збережених в кожній таблиці, можна застосувати оператор SELEKT.
Всі етапи створення бази даних з таблицями відображені на екрані командного рядка:
Для спілкування з MySQL з PHP знадобляться наступні функції:
1. Створити з'єднання з MySQL.
int mysql_connect (string hostname, string username, string password);
Установки функції:
Hostname - ім'я хоста, на якому знаходиться база даних. {{1 }} 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 {{ 1}} Тепер файл email.php матиме такий вигляд:
Лістинг email_1.php
<?
/ * Цей скрипт одержує змінні з request.html * /
/ * Змінні для з'єднання з базою даних * /
$ hostname = "localhost"; {{1} } $ username = "myusername";
$ password = "mypassword";
$ dbName = "products";
/ * Таблиця MySQL, у якій зберігаються дані * / {{ 1}} $ userstable = "clients";
/ * email адміністратора * /
$ adminaddress = (hidden)
/ * створити з'єднання * /
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); {{ 1}} / * скласти запит для вставки інформації про клієнта в таблицю * /
$ query = "INSERT INTO $ userstable VALUES ( '$ name', '$ email', '$ Preference') ";
/ * Виконати запит. Якщо станеться помилка - вивести її. * /
mysql_query ($ query) or die (mysql_error ());
echo "Інформація про вас занесена в базу даних.";
/ * Закрити з'єднання * /
mysql_close ();
?>
Ось так можна працювати з базою даних в PHP. Тепер крім письмових повідомлень, інформація про клієнта і його інтересах буде заноситися в таблицю MySQL.
Після занесення даних, нас іноді буде цікавити питання: так кого ж з наших клієнтів цікавить товар "яблука"
Напишемо скрипт apple.php.
Лістинг apple.php
<?
/ * скрипт показує клієнтів, які яблука люблять більше ніж апельсини * /
/ * Змінні для з'єднання з базою даних * /
$ hostname = "localhost";
$ username = "myusername";
$ password = "mypassword";
$ dbName = "products";
/ * Таблиця MySQL, у якій зберігаються дані * /
$ userstable = "clients"; {{1 }} / * створити з'єднання * /
mysql_connect ($ hostname, $ username, $ password) OR DIE ( "Не можу створити з'єднання");
/ * вибрати базу даних. Якщо станеться помилка - вивести її * /
mysql_select_db ($ dbName ) Or die (mysql_error ());
/ * скласти запит, який вибере всіх клієнтів - яблучників * /
$ query = "SELECT * FROM $ userstable WHERE choise = 'Яблука'"; { {1}} / * Виконати запит. Якщо станеться помилка - вивести її. * /
$ 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>";
} ?>
Ось і все, продукт практично готовий.