
- •1Передача параметрів в php
- •2Робота з базами даних в php
- •4Адресащя pecypcie в iнтернет
- •5Альтернативний синтаксис php
- •6Асоціативні масиви в php
- •Одномірні асоціативні масиви:
- •Багатовимірні асоціативні масиви:
- •7Приклад простого багатовимірного масиву:
- •Відображення списку полів у html-формі
- •10Графічне зображення як фон
6Асоціативні масиви в php
У PHP індексом масиву може бути не тільки число, а й рядок. Причому на такий рядок не накладаються ніякі обмеження: він може містити пробіли, довжина такого рядка може бути будь-якою. Асоціативні масиви особливо зручні в ситуаціях, коли елементи масиву зручніше пов’язувати зі словами, а не з числами. Отже, масиви, індексами яких є рядки, називаються асоціативними масивами.
Одномірні асоціативні масиви:
Одномірні асоціативні масиви містять тільки один ключ (елемент), відповідний конкретному індексу асоціативного масиву. Наведемо приклад:
<?php
// асоціативний масив
$names["Мерзлюк"] ="Іван";
$names["Кличко"] ="Микола";
$names["Петренко"] ="Петро";
// в даному прикладі: прізвища - це ключі асоціативного масиву
//, а імена - елементи масиву names
?>
Доступ до елементів одновимірних асоціативних масивів здійснюється так само, як і до елементів звичайних масивів, і називається доступом по ключів:
echo $names["Мерзлюк"];
Багатовимірні асоціативні масиви:
Багатовимірні асоціативні масиви можуть містити кілька ключів, відповідних конкретному індексу асоціативного масиву. Розглянемо приклад багатовимірного асоціативного масиву:
<?php
// Багатомірний масив
$A["Merzluk"] = array("name"=>"Мерзлюк І.І.", "age"=>"25", "email"=>"Merzluk@i.ua");
$A["Petrenko"] = array("name"=>"Петренко П.П.", "age"=>"34", "email"=>"Petrenko@i.ua");
$A["Klichko"] = array("name"=>"Кличко С.С.", "age"=>"47", "email"=>"Klichko@i.ua");
?>
Багатовимірні масиви схожі на записи в мові Pascal або структури в мові C. Доступ до елементів багатовимірного асоціативного масиву здійснюється наступним чином:
<?php echo $A["Merzluk"]["name"]; // Виводить Мерзлюк І.І.
echo $A["Petrenko"]["email"]; // Виводить Petrenko@i.ua?>
Як ви вже помітили, для створення багатовимірного асоціативного масиву ми використовували спеціальну функцію array, ми її розглянемо пізніше, коли будемо розглядати операції над масивами. Асоціативні багатовимірні масиви можна створювати і класичним способом, хоча це не так зручно:
<?php
// Багатомірний асоціативний масив
$A["Merzluk"]["name"] ="Мерзлюк І.І.";
$A["Merzluk"]["age"] ="25";
$A["Merzluk"]["email"] ="Merzluk@i.ua";
$A["Petrenko"]["name"] ="Петренко П.П.";
$A["Petrenko"]["age"] ="34";
$A["Petrenko"]["email"] ="Petrenko@i.ua";
$A["Klichko"]["name"] ="Кличко С.С.";
$A["Klichko"]["age"] ="47";
$A["Klichko"]["email"] ="Klichko@i.ua";
// Отримуємо доступ до ключів багатовимірного асоціативного масиву
echo $A["Merzluk"]["name"]."<br>"; // Виводить Мерзлюк І.І.
echo $A["Klichko"]["age"]."<br>"; // Виводить 1947
echo $A["Petrenko"]["email"]."<br>"; // Виводить Petrenko@i.ua
?>
7Приклад простого багатовимірного масиву:
<? Php // Багатомірний простий масив: $Arr [0] [0] = "Овочі"; $Arr [0] [1] = "Фрукти"; $Arr [1] [0] = "Абрикос"; $Arr [1] [1] = "Апельсин"; $Arr [1] [2] = "Банан"; $Arr [2] [0] = "Огірок"; $Arr [2] [1] = "Помідор"; $Arr [2] [2] = "Гарбуз"; // Виводимо елементи масиву: echo "<h3>". $Arr [0] [0 ].":</ h3> "; for ($q = 0; $q <= 2; $q + +) { echo $Arr [2] [$ q]. ""; } echo "<h3>". $Arr [0] [1 ].":</ h3> "; for ($w = 0; $w <= 2; $w + +) { echo $Arr [1] [$ w]. "<br>"; } ?>
8На сьогоднішній день, згідно з даними статистики, зібраними аналітичною компанією StatCounter Global Stats за період з травня 2011 року по травень 2012 року, ТОП-5 популярних інтернет-браузерів виглядає так.
Світ:
Європа:
Україна:
Вивчаючи дані 2008-2009 рр. і 2011-2012 рр., неважко помітити, що за своєю популярністю браузери розподілилися інакше. Наприклад, порівняльний аналіз статистики використання браузерів у світі показав, що:
популярність браузера Internet Explorer значно впала — практично в два рази (з 60,94% до 32,12%*); при цьому даний браузер, як і раніше, залишається на першому місці за популярністю;
популярність браузера Firefox залишилася практично на тому ж рівні, лише злегка впавши (з 29,82% до 25,52%*); даний браузер перебуває в світі на третьому місці за популярністю;
величезний стрибок популярності за цей період зробив браузер Google Chrome, більш ніж у 10 разів перевищивши показник 2008-2009 рр. (З 2,82% до 32,44%*); Chrome при цьому піднявся з четвертої на другу позицію ТОП-5 популярних браузерів;
браузер Safari, який у 2008-2009 був на 3 місці, поступився тепер своєю позицією Chrome і Firefox, проте популярність його з тих пір зросла майже в 2,5 рази (з 3% до 7,11%*);
популярність браузера Opera впала в 1,5 рази (з 2,71% до 1,77%); даний браузер займає нижню строчку топової п'ятірки популярних браузерів.
*— станом на травень 2012 року
У порівнянні з попереднім аналізованим періодом, у 2011-2012 роках інтернет-користувачі з Європи також змінили свої вподобання:
браузер Firefox витіснив браузер IE з першого місця за популярністю, отримавши 30,79%*; тим не менш, у порівнянні з 2008-2009 рр. популярність його знизилася (було 38,75%);
популярність браузера IE впала з 47,99% до 28.32%*, і в результаті він опинився на третьому місці в ТОП-5 популярних браузерів;
браузер Chrome збільшив свою популярність з 2,73% до 29,48%*, при цьому з п'ятої позиції перемистівся відразу на другу;
популярність браузера Safari злегка зросла (з 2,78% до 7,15%*); даний браузер, як і раніше, займає четвертий рядок;
браузер Opera втратив свою популярність (з 6,84% до 3,43%*); опустився з третьої позиції в рейтингу на п'яту.
*— станом на травень 2012 року
В Україні картина злегка відрізняється від світової і загальноєвропейської . Ось які зміни в ТОП-5 популярних браузерів серед користувачів Україні в порівнянні з 2008-2009 роками:
провідну позицію в Україні серед браузерів, як і раніше, займає браузер Opera; загальна популярність даного браузера впала з 43,3% до 29,17%*;
браузер Firefox був на третьому місці, а тепер став на другому; популярність браузера зросла з 26,47% до 28,2%*;
браузер IE перемістився з другого місця на четверте; полярність браузера впала з 27,06% до 13,1%*;
браузер Chrome був на четвертому місці, а став — на третьому; популярність Chrome значно зросла (з 2,14% до 26,81%*);
браузер Safari залишився на п'ятому місці, однак загальна його популярність зросла з 0,59% до 1,78%*, тобто приблизно в 3 рази.
*— станом на травень 2012 року
9 заємодія PHP і MySQL
Встановлення з'єднання з БД
Вибір бази даних
Одержання списку полів таблиці
Запис даних у базу даних
Відображення даних, що зберігаються в MySQL
Ця частина лекції ознайомить зі способами взаємодії PHP і СУБД MySql. Основна увага буде приділена встановленню з'єднання з базою даних, функціям відправлення запитів і обробці відповідей (mysql_connect, mysql_query, mysql_result, mysql_num_rows, mysql_close). Приклад - створення web -інтерфейсу для адміністрування бази даних віртуального музею історії.
У дистрибутив PHP входить розширення, що містить вбудовані функції для роботи з базою даних MySQL. У цій частині лекції ми познайомимося з деякими основними функціями для роботи з MySQL, що будуть потрібні для розв’язання задач побудови web-інтерфейсів з метою відображення і наповнення бази даних. Виникає питання, навіщо будувати такі інтерфейси? Для того щоб вносити інформацію в базу даних і переглядати її вміст могли люди, не знайомі з мовою запитів SQL. При роботі з web-інтерфейсом для додавання інформації в базу даних людині потрібно просто ввести ці дані в html-форму і відправити їх на сервер, а наш скрипт зробить все інше. А для перегляду вмісту таблиць досить просто клацнути по посиланню і зайти на потрібну сторінку.
Для наочності будемо будувати ці інтерфейси для таблиці Artifacts, у якій міститься інформація про експонати віртуального музею інформатики. У попередній частині лекції ми вже наводили структуру цієї колекції, а також її зв'язку з колекціями опису персон (Persons) і зображень (Images). Нагадаємо, що кожен експонат у колекції Artifacts описується за допомогою наступних характеристик:
назва (title);
автор (author);
опис (description);
альтернативна назва (alternative);
зображення (photo).
Назва й альтернативна назва є рядками менш ніж 255 символів довжиною (тобто мають тип VARCHAR(255)), опис - текстове поле (має тип TEXT), а в полях "автор" і "зображення" містяться ідентифікатори автора з колекції Persons і зображення експоната з колекції Images відповідно.
Отже, у нас є якась таблиця в базі даних. Щоб побудувати інтерфейс для додавання інформації в цю таблицю, потрібно її структуру (тобто набір її полів) відобразити в html-форму. Розіб'ємо цю задачу на наступні підзадачі:
установка з'єднання з БД;
вибір робочої БД;
одержання списку полів таблиці;
відображення полів у html-форму.
Після цього дані, введені у форму, потрібно записати в базу даних. Розглянемо всі ці задачі одну за одною.
14.1. Встановлення з'єднання із БД |
<вверх> |
Отже, перше, що потрібно зробити, - це встановити з'єднання з базою даних. Скористаємося функцією mysql_connect.
Синтаксис mysql_connect
mysql_connect ( [рядок server [, рядок username [, рядок password
[, логічне new_link [, ціле client_flags]]]]])
Дана функція встановлює з'єднання із сервером MySQL і повертає вказівник на це з'єднання або FALSE у випадку невдачі. Для відсутніх параметрів встановлюються наступні значення за замовчуванням:
server = 'localhost:3306'
username = ім'я користувача власника процесу сервера
password = порожній пароль
Якщо функція викликається двічі з тими самими параметрами, то нове з'єднання не встановлюється, а повертається посилання на старе з'єднання. Щоб цього уникнути, використовують параметр new_link, що змушує в будь-якому випадку відкрити ще одне з'єднання.
Параметр client_flags - це комбінація наступних констант: MYSQL_CLIENT_COMPRESS (використовувати протокол стиску), MYSQL_CLIENT_IGNORE_SPACE (дозволяє вставляти пробіли після імен функцій), MYSQL_CLIENT_INTERACTIVE (чекати interactive_timeout секунд - замість wait_timeout - до закриття з'єднання).
Параметр new_link з'явився в PHP 4.2.0, а параметр client_flags - у PHP 4.3.0.
З'єднання із сервером закривається при завершенні виконання скрипта, якщо воно до цього не було закрито за допомогою функції mysql_close().
Отже, установлюємо з'єднання з базою даних на локальному сервері для користувача nina з паролем "123":
<?
$conn = mysql_connect("localhost", "nina","123")
or die("Неможливо установити з'єднання: ". mysql_error());
echo "З'єднання встановлене";
mysql_close($conn);
?>
Дія mysql_connect рівносильна команді shell>mysql -u nina -p123
14.2. Вибір бази даних |
<вверх> |
Після встановлення з'єднання потрібно вибрати базу даних, з якою будемо працювати. Наші дані зберігаються в базі даних book. У MySQL вибір бази даних здійснюється за допомогою команди use:
mysql>use book;
У PHP для цього існує функція mysql_select_db.
Синтаксис mysql_select_db:
логічне mysql_select_db (рядок database_name [, ресурс link_identifier])
Ця функція повертає TRUE у випадку успішного вибору бази даних і FALSE - у противному випадку.
Зробимо базу даних book робочою:
<?
$conn = mysql_connect("localhost","nina","123")
or die("Неможливо установити з'єднання: ". mysql_error());
echo "З'єднання встановлене";
mysql_select_db("book");
?>
14.3. Одержання списку полів таблиці |
<вверх> |
Тепер можна зайнятися власне розв’язанням задачі. Як одержати список полів таблиці? Дуже просто. У PHP і на цей випадок є своя команда - mysql_list_fields.
Синтаксис mysql_list_fields
ресурс mysql_list_fields (рядок database_name,
рядок table_name[, ресурс link_identifier])
Ця функція повертає список полів у таблиці table_name у базі даних database_name. Отже, вибирати базу данних нам було необов'язково, але це знадобиться пізніше. Як можна помітити, результат роботи цієї функції - змінна типу ресурс. Тобто це не зовсім те, що ми хотіли отримати. Це посилання, яке можна використовувати для одержання інформації про поля таблиці, включаючи їх назви, типи і прапори.
Функція mysql_field_name повертає ім'я поля, отриманого в результаті виконання запиту. Функція mysql_field_len повертає довжину поля. Функція mysql_field_type повертає тип поля, а функція mysql_field_flags повертає список прапорів поля, записаних через пробіл. Типи полів можуть бути int, real, string, blob і т.д. Прапори можуть бути not_null, primary_key, unique_key, blob, auto_increment і т.д.
Синтаксис у всіх цих команд однаковий:
рядок mysql_field_name (ресурс result, ціле field_offset)
рядок mysql_field_type (ресурс result, ціле field_offset)
рядок mysql_field_flags (ресурс result, ціле field_offset)
рядок mysql_field_len (ресурс result, ціле field_offset)
Тут result - це ідентифікатор результату запиту (наприклад, запиту, відправленого функціями mysql_list_fields або mysql_query (про неї буде розказано пізніше)), а field_offset - порядковий номер поля в результаті.
Взагалі кажучи, те, що повертають функції типу mysql_list_fields або mysql_query, являє собою таблицю, а точніше, вказівник на неї. Щоб одержати з цієї таблиці конкретні значення, потрібно задіяти спеціальні функції, що пострічково читають цю таблицю. До таких функцій і відносяться mysql_field_name і т.п. Щоб перебрати всі рядки в таблиці результату виконання запиту, потрібно знати кількість рядків у цій таблиці. Команда mysql_num_rows(ресурс result) повертає кількість рядків у безлічі результатів result.
А тепер спробуємо одержати список полів таблиці Artifacts (колекція експонатів).
<?
$conn = mysql_connect("localhost","nina","123")
or die("Неможливо установити з'єднання: ". mysql_error());
echo "З'єднання встановлене";
mysql_select_db("book");
$list_f = mysql_list_fields ("book","Artifacts",$conn);
$n = mysql_num_fields($list_f);
for($i=0;$i<$n; $i++){
$type = mysql_field_type($list_f, $i);
$name_f = mysql_field_name($list_f,$i);
$len = mysql_field_len($list_f, $i);
$flags_str = mysql_field_flags ($list_f, $і);
echo "<br>Ім'я поля: ". $name_f;
echo "<br>Тип поля: ". $type;
echo "<br>Довжина поля: ". $len;
echo "<br>Рядок прапорів поля: ". $flags_str . "<hr>";
}
?>
У результаті повинно вийти приблизно от що (якщо в таблиці всього два поля, звичайно):
Ім'я поля: id
Тип поля: int
Довжина поля: 11
Рядок прапорів поля: not_null primary_key auto_increment
Ім'я поля: title
Тип поля: string
Довжина поля: 255
Рядок прапорів поля: