Взаємодія PHP і MySQL, Проектування інформаційних ресурсів Інтернет, ЗНТУ
« Назад5. Взаємодія PHP і MySQL5.1. РНР функції для роботи з MySqlОднією з найважливіших особливостей РНР є зручність взаємодії з базами даними. Зокрема, для взаємодії з MySQL нам будуть потрібні такі функції: mysql_connect(string hostname, string username, string password); Створити з'єднання з MySQL. Параметри: Hostname - ім'я хоста, на якому перебуває база даних. Username - ім'я користувача. Password - пароль користувача. Функція повертає параметр типу int, який більше 0, якщо з'єднання відбулося успішно, і дорівнює 0 у протилежному випадку. mysql_select_db(string database_name, int link_identifier); Вибрати базу даних для роботи. Параметри: Database_name - ім'я бази даних. link_identifier - ідентифікатор з'єднання, що отримано у функції mysql_connect. (параметр необов'язковий, якщо він не вказується, то використовується ID від останнього виклику mysql_connect). Функція повертає значення true або false mysql_query(string query, int link_identifier); Функція виконує запит до бази даних. Параметри: query - рядок, що містить запит link_identifier - див. попередню функцію. Функція повертає ID результату або 0, якщо сталася помилка. mysql_result(int result, int i, column); Функція повертає значення поля в стовпці column і в рядку i. mysql_fetch_row ($result); Функція дозволяє одержати доступ до даних після виконання запиту SELECT. Параметри: $result результат виконання mysql_query() Функція повертає набір значень у вигляді одновимірного масиву, що являє собою один рядок із двовимірного масиву $result. Перший виклик функції повертає перший рядок двовимірного масиву $result, а кожний наступний – чергову. Як індекси однвимірного масиву використовуються порядкові номери елементів. Нумерація починається з нуля. mysql_fetch_array ( $result) Те ж, що й попередня функція, тільки як індекси масиву використовуються імена полів таблиці. mysql_close(int link_identifier); Функція закриває з'єднання з MySQL. Параметри: link_identifier - див. вище. Функція повертає значення true або false. mysql_num_rows ( $result) Параметри: $result результат виконання mysql_query() Функція повертає кількість рядків двовимірного масиву $result. Розглянемо тепер декілька прикладів скриптів, що взаємодіють з MySQL. Скрипти будуть звертатися до бази даних library, розглянутої в попередніх розділах. Створимо новий хост test.ua. Для цього створимо папку test.ua за адресою c:/webservers/home/ (якщо Денвер установлений у кореневому каталозі диска С). Потім створюємо папку www у папці test.ua і надалі будемо складати в цю папку всі файли прикладів. 5.2. Виведення даних з таблиціНаберемо в блокноті текст скрипта й збережемо його за адресою c:/webservers/home/test.ua/www: <html> <body> <h2> Список читачів </h2> <?php $db = mysql_connect("localhost", "root"); mysql_select_db("library",$db); $result = mysql_query("SELECT * FROM reader",$db); while ($myrow = mysql_fetch_row($result)) {echo $myrow[1],$myrow[2].'<br>';} ?> </body> </html> Далі, запускаємо Денвер і набираємо в адресному рядку браузера http://test.ua /readers.php. У результаті у вікні браузера одержимо список читачів Список читачів Волков І. вул. Леніна 47 Жуков І. вул. Гоголя 21 Зайцев О. вул. Лісова 28 Медведєв П. вул. Задніпровська 45 Козлов Н. вул. Будівельників 56 Биков Р. вул. Гоголя 58 Тарганов Г. вул. Дзержинського 81 Клопов Є. вул. Воронезька 64 Комаров К. вул. Ювілейна 68 Блохін А. вул. Леніна 55 Розглянемо докладніше команди скрипта. У рядку $db = mysql_connect("localhost", "root"); відбувається підключення до сервера MySQL.Параметр localhost свідчить про те, що сервер MySQL установлений на тому ж комп'ютері, що й Webserver. Параметр root відповідає користувачеві із правами адміністратора, пароль у цьому випадку не потрібний. Надалі ім'я користувача й пароль треба змінити. Змінна $db – це ідентифікатор з'єднання. У рядку mysql_select_db("library",$db); вибирається база даних library. У рядку $result = mysql_query("SELECT * FROM reader",$db); виконується запит на вибірку всіх полів з таблиці reader.Змінна $result набуває результатів запиту у формі двовимірного масиву. Далі відкривається цикл і функція mysql_fetch_row($result) по черзі вибирає рядки з $result і формує щоразу одновимірний масив $myrow. У тілі циклу відбувається вивід першого й другого елементів масиву $myrow, що відповідає полям Прізвище й Адреса таблиці reader. Цикл триває доти, поки не буде прочитаний останній запис із$result. Замість функції mysql_fetch_row() можна використовувати функцію mysql_fetch_array(). У цьому випадку у якості індексів масиву $myrow використовуються імена полів і цикл матиме такий вигляд while ($myrow = mysql_fetch_array($result)) {echo $myrow['fio'],$myrow['addres'].'<br>';} Перепишемо тепер скрипт таким чином, щоб дані виводилися в таблицю. Зверніть увагу на те, як теги HTML інтегровані в PHP код. <html> <body> <h2> Список читачів </h2> <?php $db = mysql_connect("localhost", "root") or die("Неможливо з'єднатися із сервером"); mysql_select_db("library",$db)or die ("Неможливо вибрати базу даних"); $result = mysql_query("SELECT * FROM reader",$db)or die("Запит не виконаний"); echo "<table border=1>\n"; echo "<tr><td>Прізвище</td><td>Адреса</tr>\n"; while ($myrow = mysql_fetch_row($result)) { printf("<tr><td>%s</td><td>%s</td></tr>\n", $myrow[1], $myrow[2]); } echo "</table>\n"; ?> </body> </html> У скрипт також додані повідомлення, що сигналізують про збої на певних етапах роботи. Крім того, замість команди висновку echo використовується більш гнучкий оператор висновку printf(). Результат роботи скрипта представлений нижче. Список читачів
Наступні приклади демонструють взаємодію з базами даних через HTML форми. 5.3. Додавання даних у БДРозглянемо приклад додавання нового запису в таблицю book через HTML форму. Спочатку створимо файл add_book.html, що дозволяє вносити інформацію про книгу у форму. <HTML> <TITLE> Додавання книги</TITLE> <HEAD> </head> <BODY> <h2>Внесіть інформацію про книгу</h2> <form method="POST" action="insert_book.php"> <p>Інвентарний номер<br> <input type="text" name="inv"> </p> <p>Шифр<br> <input type="text" name="shifr"> </p> <p>Автор<br> <input type="text" name="autor"> </p> <p> Назва <br> <textarea name="nazv" cols="40" rows="2"></textarea> </p> <p>Видавництво<br> <input type="text" name="izdat"> </p> <p>Місто видання<br> <input type="text" name="gorod"> </p> <p>Рік видання<br> <input type="text" name="year"> </p> <p>Вартисть<br> <input type="text" name="price"> </p> <input type="submit" value="Добавити"> <input type="reset" value="Очистити"> </body> </html> У браузері це має такий вигляд Тепер напишемо скрипт, що приймає дані з форми й вносить їх у таблицю book. Ім'я файлу зі скриптом insert_book.php прописане в атрибуті форми action. <HTML> <BODY> <?php if (isset($_POST['inv'])) {$inv=$_POST['inv'];} if (isset($_POST['shifr'])) {$shifr=$_POST['shifr'];} if (isset($_POST['autor'])) {$autor=$_POST['autor'];} if (isset($_POST['nazv'])) {$nazv=$_POST['nazv'];} if (isset($_POST['izdat'])) {$izdat=$_POST['izdat'];} if (isset($_POST['gorod'])) {$gorod=$_POST['gorod'];} if (isset($_POST['year'])) {$year=$_POST['year'];} if (isset($_POST['price'])) {$price=$_POST['price'];} $id=mysql_connect('localhost','root') or die ("Неможливо підключитися до сервера"); mysql_select_db('library') or die("БД не обрана"); echo $inv,$shifr,$autor,$nazv,$izdat,$gorod,$year,$price; $query="INSERT INTO book VALUES('$inv','$shifr','$autor','$nazv','$izdat','$gorod','$year','$price')"; $result=MYSQL_QUERY($query); if($result){echo "Дані успішно внесені";} else {echo "Дані не внесені";} mysql_close($id); ?> </body> </html> 5.4. Видалення даних із БДРозглянемо тепер приклад видалення читача з таблиці reader через HTML форму. Для цього створимо файл del_reader.html <HTML> <TITLE>Вилучення читача</TITLE> <HEAD> </head> <BODY> <h3>Вилучити читача</h3> <form method="POST" action="del_r.php"> <p> Номер квитка <br> <input type="text" name="nbil"> </p> <p>Прізвище<br> <input type="text" name="fio"> </p> <input type="submit" value="Вилучити"> <input type="reset" value="Очистити"> </body> </html> У браузері це має такий вигляд Файл del_r.php, що обробляє дані з форми, має вигляд <HTML> <HEAD> <TITLE>Вилучення читача</TITLE> </head> <BODY> <?php if (isset($_POST['nbil'])) {$nbil=$_POST['nbil'];} if (isset($_POST['fio'])) {$fio=$_POST['fio'];} $id=mysql_connect('localhost','root') or die ("Неможливо підключитись до серверу"); mysql_select_db('library') or die("БД не вибрана"); $query="DELETE FROM reader WHERE n_bil='$nbil' AND fio='$fio'"; $result=MYSQL_QUERY($query); if($result){echo "Читача вилучено";} else {echo "Помилка, читача не вилучено";} mysql_close($id); ?> </body> </html> Розглянемо тепер видалення читача з таблиці, використовуючи веб-форму зі списком, що випадає. Для цього створюємо файл del_list.php, що формує список, що випадає, і наповнює його записами з таблиці reader <HTML> <TITLE>Вилучити читача</TITLE> <HEAD> </head> <BODY> <h3>Виберіть читача</h3> <form method="POST" action="del_rd.php"> <select name="list"> <?php $id=mysql_connect('localhost','root') or die ("Неможливо підключитись до серверу"); mysql_select_db('library') or die("БД не вибрана"); $result=mysql_query("SELECT * FROM reader"); while($au=mysql_fetch_row($result)) {echo "<option value='$au[0]'>$au[0] $au[1]</option>\n";} ?> </select> <input type="submit" value="Вилучити"> </body> </html> У списку виводимо номер квитка читача $au[0] і прізвище $au[1], оскільки в списку можуть бути однофамільники. У браузері це буде виглядати таким чином. Для прийому даних з форми й видалення читача з таблиці reader створюємо файл del_rd.php <HTML> <TITLE>Вилучити читача</TITLE> <HEAD> </head> <BODY> <?php if (isset($_POST['list'])) {$nbil=$_POST['list'];} $id=mysql_connect('localhost','root') or die ("Неможливо підключитись до серверу"); mysql_select_db('library') or die("БД не вибрана"); $result=mysql_query("SELECT * FROM reader"); $query="DELETE FROM reader WHERE n_bil='$nbil'"; $result=MYSQL_QUERY($query); if($result){echo "Читача вилучено";} else {echo "Помилка, читача не вилучено";} mysql_close($id); ?> </body> </html> 5.5. Відбір даних з поєднаних таблицьПопередні приклади демонстрували операції з однією таблицею бази даних. У наступному прикладі побудуємо запит, що відбирає дані з декількох таблиць. Створимо інтерфейс, який дозволяє переглянути список книг, які на руках у вибраного читача. На відміну від попередніх запитів, форма запиту і відображення результатів будуть поєднані в одному файлі. <HTML> <TITLE>Абонемент</TITLE> <HEAD> </head> <BODY> <form method="POST" action=""> <p><strong>АБОНЕМЕНТ</strong><br> <select name="nbil"> <option selected>Виберіть читача</option> <?php $id=mysql_connect('localhost','root') or die ("Неможна підключитись до серверу"); mysql_select_db('library') or die("неможна вибрать БД"); $res1=mysql_query("SELECT * FROM reader"); while($au=mysql_fetch_row($res1)) {echo "<option value='$au[0]'>$au[0] $au[1]</option>\n";} echo '</select><input type="submit" name="send" value="Показати список книг"><br><br>'; if(ISSET($_POST['send'])) { if(ISSET($_POST['nbil'])){$nbil=$_POST['nbil'];} if(ISSET($_POST['fio'])){$fio=$_POST['fio'];} $res2=mysql_query("SELECT * FROM reader WHERE n_bil='$nbil'"); $res_fio=mysql_fetch_row($res2); echo "<strong>Прізвище читача:</strong> ".$res_fio[1]."<br>"; echo "<strong>Список книг:</strong><br>"; $query="SELECT book.autor,book.nazv FROM book,abonement WHERE abonement.n_bil='$nbil' AND abonement.inv=book.inv"; $res3=MYSQL_QUERY($query) or die ('Помилковий запит'); $i=0; $myrow=mysql_fetch_row($res3) or die ('Книг на руках немає'); do {$i=$i+1; echo $i.". " .$myrow[0].". ". $myrow[1] ."<br>";} While($myrow=mysql_fetch_row($res3)); } ?> </body> </html> Оскільки атрибут форми action має пусте значення, то для обробки форми використовується таж сама сторінка. При першому відкриті сторінки кнопка Submit ще не натиснута, тому змінна send не визначена, і частина коду, яка відображає список книг, виконуватись не буде. Після того, як користувач вибере читача і натисне кнопку Показати список книг, функція ISSET($_POST['send']) буде мати значення True, що відкриває шлях для виконання запиту і виводу результатів. Отже, ми розглянули основні прийоми використання баз даних для створення веб-ресурсів. У другій частині рекомендацій представлені завдання для лабораторних робіт і приклади їх виконання.
РЕКОМЕНДОВАНА ЛІТЕРАТУРА
З повагою ІЦ "KURSOVIKS"! |