Лекція №9, Розробка програм з використанням серверних скриптів
Код роботи: 3749
Вид роботи: Лекція
Предмет: Web-програмування
Тема: №9, Розробка програм з використанням серверних скриптів
Кількість сторінок: 12
Дата виконання: 2015
Мова написання: українська
Ціна: безкоштовно
Написання скриптів з використанням РНР. Підключення баз даних.
База Даних (БД) - структурований організований набір даних, що описують характеристики яких-небудь фізичних або віртуальних систем. «Базою даних» часто спрощено або помилково називають Системи Управління(керування) Базами Даних (СУБД). Потрібно розрізняти набір даних (власне БД) і програмне забезпечення, призначене для організації і ведення бази даних (СУБД).
Організація структури БД формується виходячи з таких міркувань: Адекватність описуваному об'єкту/системі - на рівні концептуальної і логічної моделі. Зручність використання для ведення обліку і аналізу даних - на рівні так званої фізичної моделі.
Види концептуальних (інфологічних) моделей БД: «суть-зв'язок», семантичні, графи
Види логічних (даталогічних) моделей БД:
Документальні (архіви) - орієнтовані на формат документа, дескрипторні, тезаурусні.
Фактографічні (картотеки)
Теоретико-графові: ієрархічна модель, мережева модель.
Теоретико-множинні: реляційна модель (er-модель), багатовимірна модель.
Об'єктно-орієнтовані: об'єктна модель.
Засновані на інвертованих файлах.
Таким чином, по моделі представлення даних БД класифікуються:
• Картотеки
• Мережеві
• Ієрархічні
• Реляційні
• Багатовимірні
• Об'єктно-орієнтовані
• Дедуктивні
На рівні фізичної моделі електронна БД є файлом або їх набором у форматі TXT, CSV, Excel, DBF, XML або в спеціалізованому форматі конкретної СУБД. Також в СУБД в поняття фізичної моделі включають спеціалізовані віртуальні поняття, що існують в її рамках, - таблиця, табличний простір, сегмент, куб, кластер і так далі
В даний час найбільшого поширення набули реляційні бази даних.
Картотеками користувалися до появи електронних баз даних. Мережеві і ієрархічні бази даних вважаються за застарілі, об'єктно-орієнтовані поки ніяк не стандартизовані і не набули широкого поширення. Деяке відродження отримали ієрархічні бази даних у зв'язку з появою і розповсюдженням XML.
Поняття реляційний (англ. relation - відношення) пов'язано з розробками відомого англійського фахівця в області систем баз даних Едгара Кодда (Edgar Codd).
Ці моделі характеризуються простотою структури даних, зручним для користувача табличним уявленням і можливістю використання формального апарату алгебри стосунків і реляційного числення для обробки даних.
Реляційна модель орієнтована на організацію даних у вигляді двовимірних таблиць. Кожна реляційна таблиця є двовимірним масивом і володіє наступними властивостями:
• кожен елемент таблиці - один елемент даних
• всі стовпці в таблиці однорідні, тобто всі елементи в стовпці мають однаковий тип (числовий, символьний і т. д.)
• кожен стовпець має унікальне ім'я
• однакові рядки в таблиці відсутні
• порядок проходження рядків і стовпців може бути довільним
Найбільш часто для розрообки веб сторінок використовується MySQL (ver 4.x; 5.x;6.0b).
MYSQL ( сленг. «мускул»)[1] - вільна система управління базами даних (СУБД). MYSQL є власністю компанії Sun Microsystems, що здійснює розробку і підтримку додатку. Розповсюджується під GNU General Public License і під власною комерційною ліцензією, на вибір. Окрім цього компанія MYSQL AB розробляє функціональність за замовленням ліцензійних користувачів, саме завдяки такому замовленню майже в найраніших версіях з'явився механізм реплікації.
Перше, що потрібне для створення динамічних сторіночок - база даних, де зберігатиметься вся інформація. Хочете мати можливість проглядати вміст таблиць баз даних, робити вибірки, додавати або оновлювати дані. Все це можна робити за допомогою вбудованих функцій в РНР для роботи з базами даних.
Для початку роботи у нас повинна бути встановлена база POSTGRESQL або MYSQL. Рекомендується остання, оскільки вона працює під Unix і Windows, стабільніша, швидка і стійка до помилок. Ще раз сформулюємо наше завдання: освоїти приєднання до сервера бази даних, створення і виконання SQL запитів, а також роботу з помилками. Без знання цих дій ми навряд чи зможемо без проблем управлятися з базою даних.
Отже, приступимо. До речі, далі по тексту я використовуватиму MYSQL на увазі викладених вище за причини (хоча з POSTGRESQL всі дії схожі, треба лише поміняти префікс mysql_ на pg_).
Створимо базу даних телефонних номерів співробітників вашої фірми для наших тестів:
shell>mysql -u root
mysql> create database basa;
Query OK, 1 row affected (0.00 sec)
mysql> use basa;
Database changed
mysql> CREATE TABLE phone (
-> id int(10) NOT NULL auto_increment,
> name varchar(32) NOT NULL
> phone varchar(32) NOT NULL
> PRIMARY KEY (id)
> );
Query OK, 0 rows affected (0.00 sec)
mysql>exit
Bye
Або використовуйте файл з архіву basa.sql, помістіть його в каталог MYSQL і зробіть так:
shell>mysql -u root < basa.sql
А зараз напишемо скрипт view.php, який показуватиме дані з бази даних.
<?
/* Замініть нижченаведені змінні на свої */
$host = "localhost"; // MYSQL server
$user_db = "root"; // MYSQL користувач
$pass_db = ""; // MYSQL пароль
$dbase = "basa"; // MYSQL база даних
$dtable = "phone"; // Таблиця в базі даних
/* З'єднання з сервером бази даних */
mysql_connect ("$host", "$user_db", "$pass_db");
/* Вибір бази даних */
mysql_select_db("$dbase");
/* Створення SQL запиту */
$sql = "SELECT * FROM $dtable";
/* Виконання SQL запиту */
$result = mysql_query($sql);
/* Перевірка кількості строчок, що повернулися, в результате*/
$rows = mysql_num_rows($result);
/* Якщо немає результату або результат менше 1,
то попередити нас про це або вивести результат*/
if ((!$rows) || ($rows < 1)) {
echo "Результатів НЕМАЄ!!!";
} else {echo '<table width="309" border="1" cellspacing="1"
cellpadding="0">
<tr>
<td width="30">ID</td>
<td width="166">Имя</td>
<td width="98">Телефон</td>
</tr>';
while($row = mysql_fetch_array($result)){$id = $row["id"];
$name = $row["name"];
$phone = $row["phone"];
echo "<tr>
<td width="30">$id</td>
<td width="166">$name</td>
<td width="98">$phone</td>
</tr>";
}
}
При запуску цього скрипта ми одержимо сторіночку з текстом "Результатів НЕМАЄ!!!", оскільки в базі даних ці самі дані відсутні. Що робити? Перейти до наступного розділу і навчитися додавати дані з форм!
Передача даних з форми в базу даних
Створимо одну сторіночку під назвою forma.html з HTML формою і скрипт add.html, який оброблятиме дані з цієї форми.
Сторіночка forma.html:
<html>
<head>
<title>Добавлення даних в базу даних</title>
</head>
<body bgcolor="#FFFFFF">
<form name="test" action="add.php" >
<table cellspacing="2" cellpadding="2" border="0">
<tr>
<td>Імя</td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td>Телефон</td>
<td><input type="text" name="phone"></td>
</tr>
</table>
<input type="submit" name="submit" value="Добавити">
</form>
</body>
</html>
Скрипт add.php:
<?
/* Замініть нижченаведені змінні на свої */
$host = "localhost"; // MYSQL server
$user_db = "root"; // MYSQL користувач
$pass_db = ""; // MYSQL пароль
$dbase = "basa"; // MYSQL база даних
$dtable = "phone"; // Таблиця в базі даних
/* З'єднання з сервером бази даних */
mysql_connect ("$host", "$user_db", "$pass_db");
/* Вибір бази даних */
mysql_select_db("$dbase");
/* Увага!!! Якщо Ви працюєте під Windows,
то зніміть коментар з наступних рядків */
// $name = $HTTP_GET_VARS["name"];
// $phone = $HTTP_GET_VARS["phone"];
// Основні дії скрипта
// Створення SQL запиту
$sql = "INSERT INTO $dtable (id,name,phone) ";
$sql.= "VALUES ('','$name','$phone')";
/* Виконання SQL запиту */
$result = mysql_query($sql);
// Перевірка виконання операції
if(!$result){ echo "<H2>Помилка!</H2>n";
echo mysql_errno().": ".mysql_error()."<P>";
} else {
print "<META HTTP-EQUIV="Refresh" CONTENT="2; URL=forma.html">";
echo "Запис <b>$name - $phone</b> створена!";
//echo phpinfo();
}Як бачите, дані з форми (поля name і phone) РНР розуміє як змінні. І ці змінні дуже легко можна додати в базу даних. Тепер при прогляданні сторіночки view.phр Ви побачите те, що власноручно внесли.
Дані можна обробляти скриптом, а також як частина URL. Наприклад: http://localhost/add.phр?name=SomeName&phone=263962 додасть в базу даних ім'я Student з телефоном 263962.
Дати
PHP є цілий набір зручних функцій для виведення дат і часу, а також для різних перетворень даних про час і дату.
Для того, щоб відобразити в певному форматі дату і час, скористайтеся функцією date(). Для неї потрібно задати два аргументи: опис формату висновку дати і вказівка того моменту часу, інформацію про яке Ви хочете вивести. Вказівка на момент часу дається у формі "число секунд з початку 1970 року". (Якщо Ви хочете вивести поточний час, Ви можете скористатися функцією time(), яка повертає значення поточного часу.) Функція date() має масу опцій форматування, таких же як у функції strftime() у C або у функції POSIX::strftime() у Perl.
$birthday_stamp = mktime(19,45,0,3,10,1975);
$birthday_formatted = date('F d, Y - g:i a',$birthday_stamp);
echo "Давид народився $birthday_formatted."
дає
Давид народився March 10, 1975--7:45 p.m.
Звичайно, якщо Ви маєте на увазі конкретну дату, хитрі функції форматування не потрібні, оскільки Ви наперед точно знаєте як повинен виглядати текст, що виводиться. Ці функції потрібні, наприклад, у тому випадку, коли Ви виводите частину інформації із заповненої користувачем форми, в якій користувач повинен був ввести дату:
<SELECT NAME="when">
$d = time();
for ($i = 0; $i < 10; $i++) {echo '<OPTION VALUE="'.$d.'">'.date('F d',$d);
$d += 86400;
</SELECT>
Цей шматок коду служить для висновку на екран списку вибору, що включає 10 варіантів відповіді -- сьогодні і кожний з подальших 9 днів. До почала виконання циклу ми зберігаємо поточний час в змінній $d. У кожному варіанті вибору, що задається рядком <OPTION>, значення "value" встановлюється рівним відповідній тимчасовій відмітці у форматі Unix, а на екран виводиться місяць і день ("July 27", "July 28", і так далі.) Після виведення кожної дати (кожного рядка <OPTION>), значення $d збільшується на 86,400 (стільки секунд в добі -- 24 години * 60 хвилин * 60 секунд).
Застосовуючи функції mktime() і date() Ви можете сформувати і вивести будь-яку інформацію, похідну від введеної користувачем дати.
Cookies
Установка і прочитування cookies в PHP - це, можна сказати, подарунок долі! Ми не хочемо займатися тут агітацією на користь cookie, але не можна не сказати, що це дуже зручний інструмент.
Для створення і модифікації значення cookie використовується функція PHP setcookie(). Функція setcookie() сприймає до шести аргументів, залежно від того, як Ви збираєтеся управляти значеннями cookie і хто прочитуватиме її значення.
Простий спосіб встановити cookie такий:
setcookie('name', 'bret');
Потім, для кожної подальшої сторінки на Вашому сайті, що переглядається протягом даної сесії (поки користувач не покине сайт) змінна $name матиме значення 'bret' і його можна легко прочитати засобами PHP. Цей тип cookie відомий як cookie-сесія, оскільки значення зберігається протягом призначеної для користувача сесії.
Якщо Ви хочете, щоб значення cookie запам'ятовувалося brauzerom після того, як користувач закінчить сесію, Ви повинні передати функції setcookie() третій параметр - дату закінчення терміну дії cookie. Оскільки PHP сформувався в основному в середовищі Unix, Ви повинні представити час закінчення терміну дії cookie як число секунд, що пройшли з 1 січня 1970 р. Якщо Ви маєте досвід програмування для Unix, це не здасться Вам дивовижним. Але, якщо Ви програмували тільки в середовищі Windows або Macintosh, Ви, можливо, здивуйтеся, що за цокнутий народ ці Unix-оиды.
Але не бійтеся. PHP має дуже зручну функцію, mktime(). Ви указуєте їй як параметри (у вказаному порядку) годину, хвилину, секунду, місяць, день і рік, задаючі той момент часу, який Ви хочете представити в сприйманому UNIX форматі, і mktime() повертає Вам число секунд, що пройшли з 1 січня 1970 р. до вказаного моменту часу. Наприклад, якщо Ви хочете, щоб термін дії cookie закінчився 1 січня 2000 р., Ви записуєте:
$y2k = mktime(0,0,0,1,1,2000);
setcookie('name', 'bret' $y2k);
Якщо Ви хочете зрадити значення cookie на нове, Ви можете просто переписати його (її?) значення. Таким чином, навіть якщо brauzer вже посилав значення cookie серверу на одній з попередніх сторінок, цілком можливо повідомити сервер, що насправді Вас звуть "jeff."
$y2k = mktime(0,0,0,1,1,2000);
setcookie('name', 'jeff' $y2k);
Зверніть увагу на те, що при цьому не міняється значення змінної $name. Воно встановлюється при завантаженні сторінки. Якщо Ви хочете щоб значення змінної змінювалося синхронно із зміною значення cookie, Ви повинні зрадити код таким чином:
$name = 'jeff';
$y2k = mktime(0,0,0,1,1,2000);
setcookie('name' $name, $y2k);
Наступні два параметри функції setcookie() дозволяють Вам задати шлях і ім'я домена того, хто може прочитати значення Вашого cookie. За умовчанням тільки сторінки, розташовані в тому ж каталозі або нижч0435 в структурі підкаталогів того сервера, який встановив cookie, можуть прочитати його (її??) значення. Це робиться з міркувань безпеки. Проте, якщо у Вашого сервера два доменні імена: "www.domain.com" і "other.domain.com", і Ваш ekaunt дозволяє Вам обслуговувати сторінки з каталога ~/myhome, Ви повинні викликати функцію setcookie() таким чином:
setcookie('name', 'jeff' $y2k, '~/myhome' '.domain.com');
Останній параметр функції setcookie(), який ми ніколи не використовували, вимагає, щоб значення cookie передавалося тільки на ті Web-сервера, які yspol'uyut безпечний протокол з'єднання, такий як SSL. Якщо Вам це потрібне, то задайте для шостого параметра значення 1.
Видалити cookie теж дуже просто, досить передати функції setcookie() ім'я cookie і PHP зробить все інше:
setcookie('name');
На закінчення потрібно зробити ще одне зауваження, що стосується використання cookie. Через те, яка організована обробка cookies в протоколі HTTP, необхідно встановити значення всіх cookie до виведення якого-небудь тексту. Якщо зробити навпаки, PHP видасть Вам попередження і значення cookie не буде послане. От так правильно:
setcookie('name', 'jeff');
echo "Hello Everyone!";
А так - ні:
echo "Hello Everyone!";
setcookie('name', 'jeff').