Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
екзамен 1-10.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
213.97 Кб
Скачать

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

  1. Встановлення з'єднання з БД

  2. Вибір бази даних

  3. Одержання списку полів таблиці

  4. Запис даних у базу даних

  5. Відображення даних, що зберігаються в 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

Рядок прапорів поля: