Етапи створення веб-додатку. Основи PHP та MySQL


Етапи створення веб-додатку. Основи PHP та MySQL

Розглянемо основні етапи створення 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-форми. Методи відправлення даних на сервер за допомогою форм

Одним з найпоширеніших додатків будь-якої мови створення серверних сценаріїв - обробка 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. 

Технологія CGI

Ми розібралися, створивши 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-програм. Розглянемо наразі тільки три з них: 

  1. REQUEST_METHOD - метод передачі даних - GET або POST (є й інші, але ми не розглядаємо їх) 
  2. QUERY_STRING - містить частину URL-адреси після вирішення питання або інших слова, дані GET-форми. 
  3. CONTENT_LENGTH - кількість запитів (дані POST-форм). 

Сервер запускає 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 - це не для нестандартних веб-серверів або особистих збочень. 

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 ...

На 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) і спілкуватися по інших протоколах.

Чому потрібно вибирати PHP 

Розробникам web-додатків немає необхідності говорити, що web-сторінки - це не тільки картинки і текст. Гідний уваги сайт повинен підтримувати досить високий рівень інтерактивності з користувачем: пошук інформації, продаж продуктів, конференції тощо. 

Традиційно все це реалізувалося CGI-скриптами, написаними на Perl. Але CGI- скрипти дуже погано масштабуються. Кожен новий виклик CGI, вимагає від ядра породження нового процесу, а це займає процесорний час і витрачає оперативну пам'ять. 

PHP пропонує інший варіант - він працює як частина web-сервера, і цим самим схожий на ASP від ​​Microsoft. синтаксис PHP дуже схожий на синтаксис C або Perl. Люди, знайомі з програмуванням, дуже швидко починають писати програми на PHP. У цій мові немає строгої типізації даних і немає необхідності в діях по виділенню / звільненню пам'яті. 

Програми, написані на PHP, легко читані. PHP - код легко візуально прочитати і зрозуміти, на відміну від Perl-програм.

Недоліки PHP 
 

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"]:

що таке SQL

 

Що таке MySQL 

MySQL - компактний багатопотоковий сервер баз даних. MySQL характеризується великою швидкістю, стійкістю і легкістю у використанні. 
MySQL був розроблений компанією TcX для швидкої обробки дуже великих баз даних. Компанія стверджує, що використовує MySQL з 1996 року на сервері з більш ніж 40 БД, які містять 10.000 таблиць, з яких близько 500 мають більше 7 мільйонів рядків (24.01.2004). 
MySQL є ідеальним рішенням для малих і середніх додатків. Вихідні тексти сервера компілюються на безлічі платформ. Найбільш повно можливості сервера проявляються на Unix-серверах, де є підтримка багато поточності, що дає значний приріст продуктивності. 
На поточний момент MySQL усе ще в стадії розробки, хоча версії 3.22 і більш пізні повністю працездатні. 
MySQL-сервер є безкоштовним для некомерційного використання. Для комерційного використання необхідно придбати ліцензію, вартість якої становить 190 EUR. 

Можливості MySQL 
 

MySQL підтримує мову запитів SQL у стандарті ANSI 92, і крім цього має безліч розширень до цього стандарту, яких немає в жодній іншій СУБД. 
Короткий перелік можливостей MySQL: 

За словами творців саме ці пункти дали можливість досягти високої швидкодії. Їх реалізація істотно знижує швидкість сервера. Ці можливості не є критичними при створенні web-додатків, що в поєднанні з високою швидкодією і малою ціною дозволило серверу набути велику популярність.

Приклади використання PHP спільно з MySQL

Робота с формами

Цей приклад демонструє як в 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

Коли цікавляться нашими товарами стане дуже багато, ми захочемо їх якось упорядкувати і зберігати інформацію про них в базі даних. Про це в наступному прикладі. 
 

Збереження даних в базі даних MySQL 

Для початку створюємо базу даних products і таблицю clients. 
Щоб створити в системі базу даних, потрібно увійти в систему MySQL і ввести в командному рядку MySQL: mysql> create database products ; 
База даних створена: 

що таке SQL

Після цього слід набрати: mysql> use products; 

Наступний етап налаштування бази даних - створення таблиць. Це робиться за допомогою SQL-команди CREATE TABLE: 

 

CREATE TABLE clients 
 (
name VARCHAR (25), 
email VARCHAR (25), {{1} } choise VARCHAR (8) 
); 


Таблиці бази даних створені:

що таке SQL

Ви можете переглянути перелік таблиць створеної бази даних c допомогою оператора SHOW. 
Можна відобразити інформацію про шпальтах всіх таблиць c допомогою оператора DESCRIBE. 

Для перегляду даних, збережених в кожній таблиці, можна застосувати оператор SELEKT.

Всі етапи створення бази даних з таблицями відображені на екрані командного рядка:

що таке SQL

Для спілкування з 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. 

 

Отримання (витяг) даних з бази даних 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>"; 
} ?> 

Ось і все, продукт практично готовий.