<
  • Главная
Статьи

Реальні проекти на PHP і MySQL. Робота з Web-службами за допомогою XML і SOAP: Частина 4. Конфігурація параметрів програми та відображення інформації про товари та категоріях

  1. Серія контенту:
  2. Цей контент є частиною серії: Реальні проекти на PHP і MySQL. Робота з Web-службами за допомогою XML і SOAP
  3. Налаштування глобальних змінних
  4. Лістинг 1. Значення за замовчуванням
  5. Лістинг 2. Перевірка даних, що надійшли від користувача
  6. Лістинг 3. Допоміжні функції
  7. Створення купівельної корзини
  8. Лістинг 4. Створення купівельної корзини
  9. Лістинг 5. Підготовка до відображення купівельної корзини
  10. Допоміжна функціональність
  11. Лістинг 6. PHP-сценарій для виведення списку книг
  12. Лістинг 7. Отримання назви категорії з бази даних
  13. Лістинг 8. PHP-функції для обробки купівельної корзини та роботи з БД
  14. Малюнок 1. Відображення книг в обраній категорії
  15. Лістинг 9. PHP-функція для відображення списку книг
  16. Лістинг 10. PHP-сценарій для відображення інформації про книгу
  17. висновок
  18. Ресурси для скачування

Реальні проекти на PHP і MySQL. Робота з Web-службами за допомогою XML і SOAP

Серія контенту:

Цей контент є частиною # з серії # статей: Реальні проекти на PHP і MySQL. Робота з Web-службами за допомогою XML і SOAP

https://www.ibm.com/developerworks/ru/library/?series_title_by=**auto**

Слідкуйте за виходом нових статей цієї серії.

Цей контент є частиною серії: Реальні проекти на PHP і MySQL. Робота з Web-службами за допомогою XML і SOAP

Слідкуйте за виходом нових статей цієї серії.

У цій статті докладно розглядаються окремі фрагменти основного PHP-сценарію, що відносяться до відображення товару в зазначеній категорії. Процес відображення списку товарів починається зі створення HTTP-сеансу, при цьому купівельна корзина зберігається у вигляді змінної сеансу. Після цього відбувається підключення необхідних файлів, що містять набори констант і змінних, а також ряд інших параметрів.

Додаток може працювати за технологією REST або за технологією SOAP, причому тип використовуваної технології визначається значенням константи METHOD. Константа CACHE містить шлях до файлу з системним кешем, значення цієї константи потрібно змінити відповідно до конфігурації використовуваної системи.

Константа ASSOCIATEDID визначає значення ідентифікатора accosiateID. Відправник буде отримувати комісійні при відправці цього значення в рамках транзакції на сайт Amazon або будь-який інший, що надає Web-служби. Константа DEVTAG містить ідентифікатор розробника, який видається при реєстрації на сайті Amazon. Без вказівки цього значення програма не буде працювати, так як віддалена система не зможе ідентифікувати підключився клієнта і відмовить в доступі.

Налаштування глобальних змінних

Головний сценарій додатка містить ряд службових операторів і основний цикл обробки подій. Робота сценарію починається з вилучення всіх змінних з глобальної змінної $ _REQUEST, яка передається в додаток при отриманні HTTP-запиту через методи GET або POST. Після цього встановлюються значення за замовчуванням для глобальних змінних, що визначають уявлення каталогу товарів. У лістингу 1 наведені використовувані значення за замовчуванням.

Лістинг 1. Значення за замовчуванням
// значення за замовчуванням для глобальних змінних if ($ mode == '') $ mode = 'books'; // інші типи товару не використовуються if ($ browseNode == '') $ browseNode = 53; // цей ідентифікатор визначає категорії товару if ($ page == '') $ page = 1; // перша сторінка, що містить 10 найменувань товару

У лістингу 1 для змінної $ mode використовується значення books. На Web-сайті, що надає послуги, можуть підтримуватися і інші типи товарів, але в даному додатку будуть використовуватися тільки книги. У будь-якому випадку, щоб змінити представлений код для роботи з іншими найменуваннями товарів не буде потрібно багато зусиль. Для цього буде потрібно перевстановити значення $ mode, а потім уточнити значення атрибутів, які повертаються для товарів, відмінних від книг. Також доведеться видалити з призначеного для користувача інтерфейсу все елементи, що відносяться до книг, і заповнити відсутні елементи новими категоріями.

Змінна $ browseNode визначає категорію книг, що відображається на сторінці. Ця змінна встановлюється при виборі користувачем посилання на певну категорію. Якщо вона не встановлена, наприклад, коли користувач вперше потрапив на сайт, то її значення буде дорівнює 53. Значення 53 - це ідентифікатор категорії «популярні книги».

Змінна $ page повідомляє Web-сайту, скільки записів на сторінці потрібно відображати для обраної категорії. Сторінка 1 містить результати з 1 по 10, друга - з 11 по 20 і т.д.

Всі дані, що надійшли від користувача за допомогою GET- або POST-запиту, повинні бути перевірені на відповідність формату, як показано в лістингу 2.

Лістинг 2. Перевірка даних, що надійшли від користувача
// перевірка і форматування вхідних даних // змінна ASINS повинна складатися з цифр і символів if (! Eregi ( '^ [A-Z0-9] + $', $ ASIN)) $ ASIN = ''; // змінна mode повинна складатися тільки з символів if (! Eregi ( '^ [az] + $', $ mode)) $ mode = 'books'; // змінні pages і browseNodes повинні бути числами $ page = intval ($ page); $ BrowseNode = intval ($ browseNode); // деякі символи будуть видалені з змінної $ search, $ search = safeString ($ search);

Функція safeString () та інші допоміжні функції представлені в лістингу 3:

Лістинг 3. Допоміжні функції
<? Php function isSOAPError (& $ result) {if (isset ($ result [ 'faultcode'])) return true; else return false; } Function padASIN ($ ASIN) {$ len = strlen ($ ASIN); $ Padding = "0000000000"; $ Padding = substr ($ padding, 0, 10- $ len); return $ padding. $ ASIN; } Function safeString ($ string) {return eregi_replace ( '[^ [: alnum:]]', '', $ string); }?>

Необхідність перевірки вхідних даних зумовлена ​​тим, що інформація, що вводиться користувачем, використовується для формування назв файлів в кеші. Якщо в даних, що надійшли будуть присутні символи / або ..., то це може привести до серйозних проблем.

Створення купівельної корзини

Далі в головному сценарії виконується створення купівельної корзини, як показано в лістингу 4.

Лістинг 4. Створення купівельної корзини
if (! isset ($ _ SESSION [ 'cart'])) {session_register ( 'cart'); $ _SESSION [ 'cart'] = array (); }

Однак для відображення інформації у вікні буде потрібно ще виконати дії, представлені в лістингу 5:

Лістинг 5. Підготовка до відображення купівельної корзини
if ($ action == 'addtocart') addToCart ($ _ SESSION [ 'cart'], $ ASIN, $ mode); if ($ action == 'deletefromcart') deleteFromCart ($ _ SESSION [ 'cart'], $ ASIN); if ($ action == 'emptycart') $ _SESSION [ 'cart'] = array (); require_once ( 'topbar.php');

У лістингу 5 перш ніж можна буде купівельної корзини з неї видаляються або в неї додаються деякі елементи. Після цього підключається файл, який містить HTML-код, таблицю стилів і виклик функції ShowSmallCart (). Коли нарешті з'явиться купівельної корзини в головному PHP-сценарії розташовується основний цикл обробки подій.

Допоміжна функціональність

В рамках основного циклу обробки подій викликаються допоміжні сценарії, що відповідають за обробку конкретних дій користувача, наприклад, висновок списку книг для обраної категорії.

У лістингу 6 представлений сценарій для виведення списку книг, заснований на принципах, викладених вище.

Лістинг 6. PHP-сценарій для виведення списку книг
<? Php require ( 'book_sc_fns.php'); // для роботи з купівельної кошиком потрібно HTTP-сеанс session_start (); $ Catid = $ _GET [ 'catid']; $ Name = get_category_name ($ catid); do_html_header ($ name); // витягти з бази даних інформацію про книгу $ book_array = get_books ($ catid); display_books ($ book_array); // якщо користувач увійшов в систему з правами адміністратора, // то вивести посилання на додавання і видалення посилань на книги if (isset ($ _ SESSION [ 'admin_user'])) {display_button ( 'index.php', 'continue', ' Продовжити покупки'); display_button ( 'admin.php', 'admin-menu', 'Меню адміністрування'); display_button ( "edit_category_form.php? catid = $ catid", 'edit-category', 'Редагувати категорію'); } Else display_button ( 'index.php', 'continue-shopping', 'Продовжити покупки'); do_html_footer (); ?>

У лістингу 6 спочатку запускається HTTP-сеанс за допомогою функції session_start (), а потім за допомогою функції get_category_name ($ catid) переданий ідентифікатор категорії перетворюється в її ім'я, як показано в лістингу 7.

Лістинг 7. Отримання назви категорії з бази даних
function get_category_name ($ catid) {// знайти в базі даних ім'я категорії по її ідентифікатором $ catid = intval ($ catid); $ Conn = db_connect (); $ Query = "select catname from categories where catid = $ catid"; $ Result = $ conn-> query ($ query); if (! $ result) return false; $ Num_cats = $ result-> num_rows; if ($ num_cats == 0) return false; $ Row = $ result-> fetch_object (); return $ row-> catname; }

Бібліотека функцій, що відповідає за зберігання та вилучення інформації про книги, приведена в лістингу 8.

Лістинг 8. PHP-функції для обробки купівельної корзини та роботи з БД
<? Php function calculate_price ($ cart) {// функція для обчислення вартості обраних товарів $ price = 0,0; if (is_array ($ cart)) {$ conn = db_connect (); foreach ($ cart as $ isbn => $ qty) {$ query = "select price from books where isbn = '$ isbn'"; $ Result = $ conn-> query ($ query); if ($ result) {$ item = $ result-> fetch_object (); $ Item_price = $ item-> price; $ Price + = $ item_price * $ qty; }}} Return $ price; } Function calculate_items ($ cart) {// функція для підрахунку кількості елементів в кошику $ items = 0; if (is_array ($ cart)) {$ items = array_sum ($ cart); } Return $ items; } Function calculate_shipping_cost () {// функція для підрахунку вартості доставки // в даному прикладі вартість доставки фіксована return 20.00; } Function get_categories () {// функція для завантаження списку категорій з бази даних $ conn = db_connect (); $ Query = 'select catid, catname from categories'; $ Result = @ $ conn-> query ($ query); if (! $ result) return false; $ Num_cats = $ result-> num_rows; if ($ num_cats == 0) return false; $ Result = db_result_to_array ($ result); return $ result; } Function get_books ($ catid) {// пошук книг певної категорії if (! $ Catid || $ catid == '') return false; $ Conn = db_connect (); $ Query = "select * from books where catid = '$ catid'"; $ Result = @ $ conn-> query ($ query); if (! $ result) return false; $ Num_books = @ $ result-> num_rows; if ($ num_books == 0) return false; $ Result = db_result_to_array ($ result); return $ result; } Function get_book_details ($ isbn) {// запит детальної інформації про книгу if (! $ Isbn || $ isbn == '') return false; $ Conn = db_connect (); $ Query = "select * from books where isbn = '$ isbn'"; $ Result = @ $ conn-> query ($ query); if (! $ result) return false; $ Result = @ $ result-> fetch_assoc (); return $ result; }?>

Функції get_books () і display_books () схожі на аналогічні функції get_categories () і display_categories (). Відмінність між ними полягає в тому, що інформація витягується з таблиці з книгами, а не з категоріями. Функція display_books () створює посилання для кожної книги в даній категорії, використовуючи сценарій, що відображає книги в певній категорії (див. Лістинг 9). При цьому кожна посилання супроводжується параметром у вигляді суфікса, що представляє собою ISBN-номер цієї книги. В кінці цього сценарію міститься код для відображення додаткової функціональності, яка з'являється на сторінці в тому випадку, якщо користувач має права адміністратора. В такому випадку на сторінці буде показаний адміністративний інтерфейс для додавання і видалення книг, категорій і т.д.

Малюнок 1. Відображення книг в обраній категорії

У лістингу 9 представлена функція display_books ($ book_array).

Лістинг 9. PHP-функція для відображення списку книг
function display_books ($ book_array) {// виведення всіх книг, переданих в масиві if (! is_array ($ book_array)) {echo '<br /> На даний момент немає доступних книг в цій категорії <br />'; } Else {// створення таблиці echo '<table width = \ "100% \" border = 0>'; // створення рядка таблиці для кожної книги foreach ($ book_array as $ row) {$ url = 'show_book.php? Isbn ='. ($ Row [ 'isbn']); echo '<tr> <td>'; if (@file_exists ( 'images /'.$ row [' isbn '].'. jpg ')) {$ title =' <img src = \ 'images /'.($ row [' isbn ']).' .jpg \ 'border = 0 />'; do_html_url ($ url, $ title); } Else {echo '& nbsp;'; } Echo '</ td> <td>'; $ Title = $ row [ 'title']. ' by '. $ row [' author ']; do_html_url ($ url, $ title); echo '</ td> </ tr>'; } Echo '</ table>'; } Echo '<hr />'; }

У лістингу 10 показаний PHP-сценарій для відображення інформації про конкретну книжку. Даний сценарій приймає на вхід ISBN-номер, після чого витягує з бази даних і відображає детальні відомості про обраної книзі. За стилем і реалізації він дуже схожий на наведені раніше сценарії, що полегшує супровід і підтримку коду в цілому.

Лістинг 10. PHP-сценарій для відображення інформації про книгу
<? Php require ( 'book_sc_fns.php'); // створення HTTP-сеансу для роботи з купівельної кошиком session_start (); $ Isbn = $ _GET [ 'isbn']; // вилучення інформації про конкретну книжку $ book = get_book_details ($ isbn); do_html_header ($ book [ 'title']); display_book_details ($ book); // установка URL для кнопки "Продовжити" $ target = 'index.php'; if ($ book [ 'catid']) {$ target = 'show_cat.php? catid ='. $ book [ 'catid']; } // якщо у користувача є права адміністратора, // то вивести посилання на редагування інформації про книгу if (check_admin_user ()) {display_button ( "edit_book_form.php? Isbn = $ isbn", 'edit-item', 'Редагувати елемент ); display_button ( 'admin.php', 'admin-menu', 'Меню адміністрування'); display_button ($ target, 'continue', 'Продовжити'); } Else {display_button ( "show_cart.php? New = $ isbn", 'add-to-cart', 'Додати'. $ Book [ 'title']. 'В мою корзину'); display_button ($ target, 'continue-shopping', 'Продовжити покупки'); } Do_html_footer (); ?>

Як завжди, на початку сценарію створюється HTTP-сеанс, а потім за допомогою рядка:

$ Book = get_book_details ($ book);

з бази даних витягується інформація про конкретну книжку. Для виведення даних в форматі HTML використовується наступний виклик:

display_book_details ($ book);

Функція display_book_details ($ book) виконує пошук файлу із зображенням книги, ім'я якого виглядає як images / $ isbn.jpg. Якщо такий файл знайти не вдається, то зображення книги не виводиться. Частина, що залишилася сценарію встановлює елементи навігації в залежності від повноважень користувача. Рядовому користувачеві буде доступна кнопка continue_shopping (продовжити покупки), яка поверне його на сторінку вихідної категорії. Також буде доступна кнопка add_to_cart (додати в кошик) для додавання книг в купівельну корзину.

Якщо увійшов в систему користувач має права адміністратора, то йому будуть запропоновані додаткові опції з адміністративного інтерфейсу.

висновок

У статті наведено докладний аналіз коду для створення купівельної корзини, яка буде взаємодіяти з Web-службами. Описано базові принципи створення каталогу товарів, методів відстеження обраного товару і функціонування платіжної системи Інтернет-магазину.

Даний проект спирається на більш ранній цикл статей «Реальні Web-проекти на PHP і MySQL. Основа Інтернет-магазину - «купівельна корзина» - є сполучною компонентом для всіх раніше написаних статей, присвячених програмуванню на PHP.

Ресурси для скачування

Схожі теми

  • Програмування з використанням PHP і MySQL в розробці Web-додатків. Частина 1 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. Частина 2 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. частина 3 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. частина 4 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. частина 5 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. частина 6 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. частина 7 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. частина 8 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. частина 9 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. частина 10 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. частина 11 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. частина 12 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. частина 13 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. частина 14 .
  • Реальні проекти на PHP і MySQL. Робота з Web-службами за допомогою XML і SOAP. Частина 1 .
  • Реальні проекти на PHP і MySQL. Робота з Web-службами за допомогою XML і SOAP. Частина 2 .
  • Реальні проекти на PHP і MySQL. Робота з Web-службами за допомогою XML і SOAP. частина 3 .
  • Реальні проекти на PHP і MySQL. Робота з Web-службами за допомогою XML і SOAP. частина 4 .

Підпишіть мене на повідомлення до коментарів

Com/developerworks/ru/library/?
ASIN; } Function safeString ($ string) {return eregi_replace ( '[^ [: alnum:]]', '', $ string); }?
Php?
Php?


Новости
  • Виртуальный хостинг

    Виртуальный хостинг. Возможности сервера распределяются в равной мере между всеми... 
    Читать полностью

  • Редизайн сайта

    Редизайн сайта – это полное либо частичное обновление дизайна существующего сайта.... 
    Читать полностью

  • Консалтинг, услуги контент-менеджера

    Сопровождение любых интернет ресурсов;- Знание HTML и CSS- Поиск и обновление контента;-... 
    Читать полностью

  • Трафик из соцсетей

    Сравнительно дешевый способ по сравнению с поисковым и контекстным видами раскрутки... 
    Читать полностью

  • Поисковая оптимизация

    Поисковая оптимизация (англ. search engine optimization, SEO) — поднятие позиций сайта в результатах... 
    Читать полностью