Від автора: у цьому уроці ми створимо з вами систему запитань і відповідей на PHP, використовуючи для цих цілей можливості MySQL, jQuery. Таку систему частіше усього називають FAQ або ЧАПИ та її використання обмежене лише Вашою фантазією — адже це може бути не тільки система питання-відповідь, але і, наприклад, покрокова інструкція при виконанні яких-небудь дій або що-небудь ще.
Результат, до якого ми будемо прагнути показаний на самому початку пропонованого відео. Коротко, ми будемо показувати тільки запитання, а відповіді на ці питання будуть приховані. По кліку на потрібне питання — відповідь на нього буде плавно з’являтися (або виїжджати — можна не обмежуватися одним ефектом). Як Ви вже, напевно, зрозуміли — ефекти ми будемо додавати за допомогою можливостей бібліотеки jQuery, ну а інформацію (питання-відповідь) — будемо зберігати в БД і отримувати її звідти за допомогою PHP. Приступимо.
Час ролика: 52:06
Посилання для скачування джерел: Завантажити вихідні коди
Посилання для скачування всього архіву (відео+исходники): Скачати одним архівом. Розмір: 126 mb.
Крок 1. Створюємо БД для системи “запитання-відповідь”
Перш за все, нам необхідно створити сховище для інформації — це, звичайно ж, зручніше це зробити, використовуючи БД. Якщо у Вас буде невелика за обсягом сторінка і для неї не потрібна буде БД — цей крок можна пропустити. Також, якщо Ви не хочете створювати БД вручну, то можете скористатися дампом БД з додаткових матеріалів та просто імпортувати його (як це зробити я показую у відео).
Створимо необхідну нам БД. Про засади роботи з БД я розповідав у ряді попередніх уроків, тому тут буду пояснювати гранично коротко. Якщо Ви використовуєте пакет Денвер, то перейдіть по посиланню http://localhost/Tools/phpMyAdmin/ і Ви потрапите на сторінку веб-програми phpMyAdmin, призначеного для адміністрування MySQL. На цій сторінці ми даємо ім’я створюваної БД — назвемо її «faq».
Після кліка по кнопці «Create» створиться потрібна нам БД. Вся інформація в БД зберігається в таблицях, тому нам потрібно створити всі необхідні таблиці, створеної БД. Створимо таблицю з тим же ім’ям («faq») і кількістю полів 3.
Після кліка по кнопці «Go» ми потрапимо на сторінку зі структурою створюваної таблиці. Тут ми повинні дати імена 3-му створюваних полів і вказати ще деяку інформацію:
ім’я поля «id», тип — INT, Index — PRIMARY, AUTO_INCREMENT;
ім’я поля — «question», тип — VARCHAR, довжина — 255;
ім’я поля — «answer», тип — TEXT.
Давайте коротко розберемо кожне з полів. З іменами, думаю зрозуміло — у першому полі «id» ми зберігаємо ідентифікатор пари питання-відповідь. У другому полі «question» — зберігаємо питання і в третьому «answer» — відповідь на це питання.
Далі, тип поля. Для поля «id» ми вказали тип INT — це цілочисельний тип, тобто, в цьому полі будуть зберігатися тільки цілі числа. Тип VARCHAR — це символьний (текстовий) тип, призначений для зберігання невеликих текстів, його довжина — 255 символів. У полі типу TEXT можна зберігати тексти великих обсягів. Крім того, для першого поля — «id» ми вказали Index — PRIMARY (в російськомовній версії phpMyAdmin це «первинний ключ») і AUTO_INCREMENT. Ці два атрибути означають, що зазначене поле ми не будемо заповнювати, його буде заповнювати сервер. При цьому всі значення, заносимые в дане поле, будуть унікальними, і кожне нове значення буде збільшено на одиницю (автоинкремент). Якщо провести якусь знайому аналогію, то це поле можна порівняти з номером по порядку в таблицях.M
Після збереження структури таблиці ми можемо перейти у вкладку Вставлення та занести в таблицю необхідні дані (хоча зазвичай це робиться через адміністративну частину).
Як я казав, ми заповнюємо тільки поля «question» і «answer», поле «id» буде заповнюватися сервером. Я створю 3 пари питання-відповідь, але у вас їх може бути як завгодно багато.
Відмінно! Ми створили БД і потрібну нам таблицю. Тепер настав час отримати інформацію з неї за допомогою PHP, і створити повноцінне додаток питань і відповідей.
Крок 2. Отримання інформації з БД, обробка її засобами PHP
Для уроку я знайшов в мережі безкоштовний шаблон сайту, в якому створив сторінку faq.php. Зверніть увагу, що розширення сторінки має бути саме php, оскільки в ній буде присутній код PHP. Перед отриманням інформації з БД, ми повинні з нею з’єднатися. Зазвичай з’єднання з БД виносять в окремий файл, який потім просто підключають до сторінки. Але наш проект навчальний і, до того ж, зовсім невеликий, тому ми все будемо робити на одній сторінці. Отже, відкриємо в редакторі сторінку faq.php і в самому верху сторінки підключимося до БД. Робиться це за допомогою 2-х функцій: mysql_connect(«ім’я сервера», «користувач», «пароль») і mysql_select_db(«ім’я БД»). Першою функцією ми підключаємося до сервера БД (в дужках вказані параметри, з якими працює функція), другий — вибираємо потрібну БД для роботи (на сервері адже може бути не одна БД):
Так як я працюю на Денвері, то вказую ім’я сервера «localhost» (у Вашому випадку, швидше за все, ім’я сервера буде таким же, навіть якщо Ви працюєте на сервері хостера… всі дані по роботі з сервером хостер надає в інструкції). За замовчуванням вже створено користувач з іменем «root», яке я і вказав. Пароль цього користувача не створено, тому в якості третього параметра функції mysql_connect() я вказав пусте значення. Також бажано дописувати при роботі з сервером MySQL умова на той випадок, якщо при з’єднанні з сервером сталася якась помилка. Це бажано робити з тієї простої причини, що якщо не вдалося з’єднатися з сервером, значить не буде вытащена інформація на сторінку, а, значить, сторінка буде напівпорожній, крім того, на ній ще й будуть виведені всілякі помилки. Ми поставили таку умову функцією die(), яка в разі помилки припинить виконання програми і виведе повідомлення, зазначене в лапках.
Другою функцією ми вибираємо потрібну нам БД. Тепер ми можемо зберегти файл та оновити сторінку. Якщо все зроблено вірно, то сторінка повинна завантажитися без всяких повідомлень і помилок. Після успішного підключення ми можемо отримувати інформацію з потрібної таблиці (таблиці також може бути кілька в обраній БД). «Спілкування» з сервером MySQL відбувається за допомогою запитів. Нам потрібен лише один запит, яким ми витягнемо всю інформацію з таблиці «faq». У запиті нам знадобиться оператор SELECT, який, власне, і забезпечує вибірку необхідної інформації. Сам запит відправляється в БД функцією mysql_query().
Отже, в потрібному місці блоку page (там, де ми хочемо виводити питання-відповідь) відкриваємо конструкцію PHP і пишемо запит:
Для тих, хто хоч трохи знайомий з англійським цей запит буде практично повністю зрозумілий. Труднощі може викликати тільки символ зірочки («*»). Цей символ можна прочитати як «всі» («all»). Сам же запит можна прочитати так: «ВИБРАТИ всі З `таблиці faq`». Всі вибране ми помістимо в змінну $res. Таким чином, ми отримали в $res весь вміст таблиці (3 рядки). Зручність роботи з MySQL полягає не тільки в тому, що ми можемо зберігати інформацію в ній, але і в тому, що цією інформацією можна дуже легко маніпулювати. Ми можемо витягти тільки конкретний ряд (рядок) або навіть конкретне поле ряду. Крім того, існують функції для того, щоб можна було легко маніпулювати ВСІЄЇ отриманої інформацією, як в нашому випадку. Ця функція — mysql_fetch_assoc(). Дана функція обробляє кожен ряд результату запиту і повертає асоціативний масив. В нашому випадку буде оброблено 3 ряди.
Що таке асоціативний масив я вже розповідав у кількох попередніх уроках. Це масив, ключами якого виступає рядок (асоціація). Ключами нашого масиву будуть виступати імена полів таблиці «faq». Як я згадував, функція mysql_fetch_assoc() обробляє 1 ряд запиту. У нас таких рядів поки що 3. Для того, щоб було опрацьовано всі 3 ряду — нам знадобиться здійснити просто 3 однотипних дії — в цьому нам допоможуть цикли, а саме — цикл while(). Про роботу з даними циклом я також досить детально вже розповідав, а тому тут скажу лише пару слів. Саме слово while можна перевести як «поки», тобто, поки буде виконуватися якесь умова (воно прописується в дужках) — ми будемо виконувати якийсь блок дій (вони прописуються в операторних дужках).
Синтаксис циклу:
while(умова){
блок дій;
}
У нашому випадку такою умовою буде формування масиву. Поки буде формуватися масив — будемо виводити інформацію з сформованого масиву. А масив буде формуватися до тих пір, поки в таблиці є рядки. Як тільки перебір рядків закінчиться — масив припинить формуватися, умова вже не буде виконуватися і блок дій також припинить виконуватися.
Весь код блоку PHP, який відповідає за виведення інформації питання-відповідь буде такою:
‘.$row[‘question’]. ‘