У попередньому уроці ми навчилися збирати дані на клієнта і відправляти їх на сервер. А на сервері написали заглушку в тому місці, де повинні повертатися товари, відфільтровані по введених параметрах. Зараз ми позбудемося заглушки і напишемо пару методів і запитів, які витягують з бази потрібні товари і повертають їх клієнту. Урок досить короткий. приступаємо
Що будемо робити?
Нам потрібно виконати всього 3 пункту:- 1. Отримати дані з клієнта і обробити їх під потреби сервера. Наприклад, проставити параметри за замовчуванням
- 2. Написати, власне, сам код для вилучення товарів з бази. В першу чергу, підготувати sql-запит
- 3. Повернути клієнту отримані дані
Отримання даних з клієнта
Ви можете запитати: для чого потрібно виділяти цю просту операцію окремо, якщо всі дані ми легко витягнемо з масиву $ _GET?
По-перше, для того, щоб проставити значення за замовчуванням. Не можна покладатися на те, що клієнт сам подбає про це.
По-друге, не всі дані знаходяться в $ _GET в придатному для використання вигляді. Наприклад, сортування з клієнта нам зручніше передавати одним параметром у вигляді поле_направленіе, наприклад, price_asc. Але в sql-запиті це окремі сутності, тому їх потрібно попередньо обробити.
Схожа ситуація і з брендами. На клієнті ми відправляємо їх у вигляді масиву brands, і php їх отримує теж як масив. Але для sql-запиту потрібна рядок - список брендів через кому. Тому бренди теж потрібно додатково обробляти.
Отже, напишемо функцію getOptions (), яка витягне дані з $ _GET і перетворює їх в зручний нам вид. Майже всі ввідні я вже повідомив, тому відразу дивимося на готовий код.
Далі ми перетворимо масив брендів в рядок айдішніков, розділених комами. Саме в такому вигляді бренди будуть використовуватися в запиті до бази.
Сортування перетворимо по-іншому. Окремо витягуємо поле сортування та параметр: asc або desc.
Зверніть увагу, що у всіх випадках ми не забуваємо підставляти значення за замовчуванням, якщо потрібний параметр не приїхав з клієнта. І тепер, коли всі дані перетворені, залишилося тільки повернути їх з функції в асоціативному масиві через return array (.)
Підготовка sql-запиту і витяг даних з бази
Всі дані підготовлені в потрібному нам вигляді, тепер напишемо запит і виконаємо його. Цим буде займатися функція getGoods ($ options, $ conn). В параметрах вона приймає $ options - дані, підготовлені попередньою функцією, і $ conn - об'єкт підключення до БД, який ми створили в попередньому уроці. Наше завдання - написати sql-запит. У загальному вигляді він виглядає так:
Повертаємо товари клієнту
Це найпростіша частина уроку. Подивимося на заглушку, написану в попередньому уроці.
Замінимо цей код на
Ми додали пару рядків: функцією getOptions витягли дані в змінну $ options. Тут же використовували її в отриманні товарів getGoods, результати зберегли в $ goods. І розширили відповідь клієнту. Параметр data перейменували в options і повернули в нього не вміст $ _GET, а вже перетворені значення. І в параметрі goods повернули масив отриманих товарів.
На цьому урок закінчений. Поки ми не можемо використовувати ці дані на клієнта, отрисовать їх в браузері - цим ми займемося на наступному уроці. Але завжди можемо відкрити консоль, потикати кнопочки і галочки і переконатися, що сервер повертає нам правильні товари.
Перевіряємо результати роботи
Тепер поставимо мінімальну ціну в 20 тисяч і змінимо сортування на спадання ціни
Як видно, тепер всього 2 товари - один сумісного відкинути через невідповідною по фільтрам ціни в 17 тисяч. І відсортовані товари вже навпаки. Якщо Ви все зробили правильно, то побачите таку саму картинку.Ви можете ще пограти з консоллю і переконатися, що дані повертаються коректно. Зрештою, найважливіше - це домогтися правильної роботи фільтрів, повернення правильного списку товарів. Розкидати отримані дані по сторінці, з урахуванням вже готової верстки - справа зовні найцікавіше, але з точки зору розробки досить просте. Але не буду забігати вперед - подробиці в наступному уроці.