Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Зображення (photo)



Назва й альтернативна назва є рядками менш ніж 255 символів довжиною (тобто мають тип VARCHAR(255)), опис - текстове поле (має тип TEXT), а в полях автор і зображення містяться ідентифікатори автора з колекції Persons і зображення експоната з колекції Images відповідно.

Отже, у нас є якась таблиця в базі даних. Щоб побудувати інтерфейс для додавання інформації в цю таблицю, потрібно її структуру (тобто набір її полів) відобразити в html-форму.

Розіб'ємо цю задачу на наступні підзадачі:

· встановлення з'єднання з БД;

· вибір робочої БД;

· одержання списку полів таблиці;

· відображення полів у html-форму.

Після цього дані, введені у форму, потрібно записати в базу даних. Розглянемо всі ці задачі поступово.

2.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 -p12314.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");

?>

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

Тепер можна зайнятися власне розв’язанням задачі. Як одержати список полів таблиці? Дуже просто. У 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

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

2.3. Відображення списку полів у html-формі

Тепер дещо підкоректуємо попередній приклад. Будемо не просто виводити інформацію про поле, а відображати його як потрібний елемент html-форми. Так, елементи типу BLOB переведемо в textarea (помітимо, що поле description, що ми створювали з типом TEXT, відображається як таке, що має тип BLOB), числа й рядки відобразимо як текстові рядки введення <input type=text>, а елемент, що має мітку автоінкремента, взагалі не будемо відображати, оскільки його значення встановлюється автоматично.

Усе це розв’язується досить просто, за винятком виділення зі списку прапорів прапора auto_increment. Для цього потрібно скористатися функцією explode.

Синтаксис explode:

масив explode(рядок separator, рядок string [, int limit])

Ця функція розбиває рядок string на частини за допомогою роздільника separator і повертає масив отриманих рядків.

У нашому випадку як роздільник потрібно взяти пробіл " ", а як задану стрічку для розбивки - рядок прапорів поля.

Отже, створимо форму для введення даних у таблицю Artifacts:

<?

$conn=mysql_connect("localhost","nina","123"); // встановлюємо з’єднання

$database = "book";

$table_name = "Artifacts";

mysql_select_db($database); // обираємо базу даних для роботи

$list_f = mysql_list_fields($database,$table_name);

// отримуємо список полів в базі

$n = mysql_num_fields($list_f);

// кількість стрічок в результаті попереднього запиту

//тобто скільки всього полів в таблиці Artifacts)

echo "<form method=post action=insert.php>";

// створюємо форму для введення даних

echo "<TABLE BORDER=0 CELLSPACING=0 width=50%><tr>

<TD BGCOLOR='#005533' align=center>

<font color='#FFFFFF'>

<b> Add new row in $table_name</b>

</font></td></tr>

<tr><td></td></tr></TABLE>";

echo "<table border=0 CELLSPACING=1 cellpadding=0 width=50% >";

// для кожного поля отримуємо його ім’я, тип, довжину й прапори

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, $i);

// із стрічки прапорів робимо масив, де кожен елемент масиву – прапор поля,

$flags = explode(" ", $flags_str);

foreach ($flags as $f){

if ($f == 'auto_increment') $key = $name_f;

// запам’ятовуємо ім’я інкремента

}

/* для кожного поля, що не є автоінкрементом, в

залежності від його типу виводимо потрібний елемент форми */

if ($key <> $name_f){

echo "<tr><td align=right bgcolor='#C2E3B6'>

<font size=2><b>&nbsp;". $name_f."</b></font>

</td>";

switch ($type){

case "string":

$w = $len/5;

echo "<td><input type=text name=\"$name_f\" size = $w ></td>";

break;

case "int":

$w = $len/4;

echo "<td><input type=text name=\"$name_f\" size = $w ></td>";

break;

case "blob":

echo "<td><textarea rows=6 cols=60 name=\"$name_f\"></textarea></td>";

break;

}

}

echo "</tr>";

echo "</table>";

echo "<input type=submit name='add' value='Add'>";

echo "</form>";

?>





Дата публикования: 2015-01-13; Прочитано: 240 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2025 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.433 с)...