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

До недавнього часу більшість додатків були побудовані на основі SQL різних типів, але з розвитком баз даних на основі документів, таких як CouchDB, різні програми почали використовувати і інші движки.

Більш того, з моменту, коли HTML5 і браузери стали застосовувати рішення localStorage, у багатьох випадках дійсно вдається забезпечити зберігання даних на стороні клієнта. Очевидно, це не те, що треба було б застосовувати на постійній основі, але це надає нам новий рівень гнучкості і можливостей, яких у нас до недавнього часу не було.

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

Але ця серія статей розповідає про засоби розробки додатків на платформі WordPress. Тому нам важливо зрозуміти не тільки, як зберегти інформацію, але і як її витягати.

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

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

Зберігання даних

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

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

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

З урахуванням усього вище сказаного, давайте почнемо з того, як ми зберігаємо інформацію в базі даних WordPress.

Розуміння бази даних

Для тих з вас, хто ще не знайомий з предметом, поясню, що база даних WordPress складається з набору таблиць.

Для дослідження теми даної статті, нам в першу чергу потрібно розглянути наступні з них:

  • wp_options. Таблиця опцій відповідає за зберігання фрагментів інформації, які пов’язані з привілеями, конфігурацією елементів, а також всім, що пов’язано з налаштуваннями, застосовними до всього сайту;
  • wp_posts. У цій таблиці зберігаються дані, пов’язані з записами. Хоча безпосередньо з цією таблицею ми працювати не будемо, важливо знати, що вона існує, щоб ми могли працювати з метаінформацією записів;
  • wp_postmeta. Як згадувалося вище, ця таблиця не відповідає за зберігання мета-інформації, що відноситься до окремих записів. А так як записи можуть представляти собою сторінки, повідомлення і користувальницькі типи записів, то це місце, де зберігається інформація, пов’язана з кожним з типів ваших записів. Вона характеризується значною гнучкістю, що стосується типів даних, які можуть в ній зберігатися, так що ви дійсно маєте багато можливостей в плані того, як ви прив’язуєте інформацію до записів (незалежно від типу, до якого вони належать);
  • wp_comments. Що зберігається в таблиці і так зрозуміло. Але це місце, де зберігаються всі коментарі і до повідомлення, і до сторінок, і до записів користувацьких типів. Як і у випадку з таблицею wp_posts, ми не будемо зберігати дані безпосередньо в неї, але важливо розуміти, що ця таблиця існує, і що таблиця метаданих коментарів, до якої ми будемо звертатися, використовує дану таблицю;
  • wp_commentmeta. Як уже згадувалося, в цій таблиці зберігаються метадані коментарів. З цієї таблиці дані витягуються при необхідності.

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

Природно, це просто загальне перерахування деяких таблиць бази даних, з якими працює WordPress. Якщо ви хочете отримати інформацію про інших таблицях — для підвищення рівня своїх знань — обов’язково ознайомтеся з описом бази даних.

Тим не менше, цього має бути достатньо, щоб можна було приступити до розгляду стандартів вилучення і запису інформації в базу даних.

Запис даних в базу даних

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

Таблиця опцій

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

  • Це питання розуміння доступних додатків;
  • Також важливо знати, як забезпечити безпеку даних.
  • По-перше, ми збираємося розглянути функції, які доступні для читання, запису і оновлення інформації в таблиці опцій WordPress .

    Додавання та оновлення опцій

    WordPress надає дві спеціальні функції для запису даних в базу опцій. Одна з них реалізована у формі додавання інформації, друга — у вигляді оновлення даних.

    Щоб додати інформацію в таблицю опцій WordPress, вам потрібно використовувати наступну функцію.

    add_option, яка приймає два параметри:

  • Ключ — або унікальний ідентифікатор інформації;
  • Значення даних, які будуть збережені.
  • Наприклад, якщо ми хочете зберегти таку інформацію, як, наприклад, власне ім’я, що вам потрібно зробити щось на зразок цього:

    add_option( ‘my-name’, ‘tom mcfarlin’ );
    І навпаки, якщо ми хочемо прочитати щось з набору $_POST , ми можемо зробити щось на зразок цього:
    if ( isset( $_POST[‘value’] ) && ! empty( $_POST[‘value’] ) {
    add_option( ‘my-value’, $_POST[‘value’] );
    }

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

    Щоб не відхилятися від основної теми, я не буду занадто докладно описувати другу функцію.

    По суті, update_option робить наступне:

  • Додає опцію, якщо він не існувала до цього;
  • Замінює поточне значення, якщо опція на даний момент вже існує.
  • Непогано, чи не правда?

    Кілька слів про модифікації теми

    Ті з вас, хто вже працював з темами WordPress — особливо ті, хто використовував Theme Customizer — ймовірно, знайомі з функцією set_theme_mod.

    Конкретно ця функція не зовсім актуальна при створенні веб-додатків на WordPress, проте для повноти картини, я хотів розглянути всі API-інтерфейси, які відповідають за запис у базу даних.

    Опис з Кодексу:

    Створює або оновлює налаштування модифікацій для поточної теми. Поряд з get_theme_mod() ця функція в деяких випадках пропонує розробникам теми більш просту альтернативу для Settings API, коли необхідно обробляти основні настройки за конкретними темами.

    Це визначення дає чітке уявлення про роботу з темами.

    Таблиці метаданих записів і коментарів

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

    Якщо коротко, то функції приймають три види даних:

    • ID елемента;
    • Ключ даних;
    • Значення даних;

    Таким чином, у випадку з записом метаінформації повідомлення, ID елемента буде відповідати ID запису; а у випадку з коментарем ID елемента буде відповідати ID коментаря.

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

    Ось як здійснюється збереження інформації в таблиці метаданих запису:

    add_post_meta( get_the_ID(), ‘my-post-information’, ‘This is my favorite post.’ );

    А ось як буде виглядати оновлення інформації таблиці метаданих коментарів:

    update_post_meta( get_the_ID(), ‘my-post-information’, ‘This is my favorite post.’ );

    Як альтернативу можна використовувати глобальну змінну $post, якщо метод не викликається всередині циклу.

    Наприклад:

    global $post;
    add_post_meta( $post->ID, ‘my-post-information’, ‘This is my favorite post.’ );

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

    Але тепер, коли ми розглянули, як зберегти інформацію в таблиці опцій, метаданих записів і мета-даних коментарів, як нам переконатися, що ніяка небезпечна інформація не потрапить у базу даних?

    Легко: перевірка безпеки даних.

    Забезпечення безпеки даних

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

    Забезпечення безпеки даних залежить від типу даних, які ви зберігаєте. Наприклад, дуже рідко ви зберігаєте в базу розмітку, SQL або інші типи вихідного коду.

    Для цього, ви, швидше за все, захочете використовувати функції PHP, такі як strip_tags і stripslahes, які призначені для очищення інформації.

    Наприклад:

    if ( isset( $_POST[‘value’] ) && ! empty( $_POST[‘value’] ) {
    $clean_value = strip_tags( stripslashes( $_POST[‘value’] ) );
    add_option( ‘my-value’, $clean_value );
    }

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

    Рішення, які ви застосовуєте, можуть залежати від типу додатка, що ви створюєте. Я наводжу лише один з багатьох способів, як можна очистити інформацію для її збереження в базі даних WordPress.

    І знову ж, це не єдиний спосіб, яким ви можете проінспектувати значення.

    Пам’ятайте, що WordPress надає різні можливості для цих цілей:

  • sanitize_email;
  • sanitize_file_name;
  • sanitize_html_class;
  • sanitize_key;
  • sanitize_meta;
  • sanitize_mime_type;
  • sanitize_option;
  • sanitize_sql_orderby;
  • sanitize_text_field;
  • sanitize_title;
  • sanitize_title_for_query;
  • sanitize_title_with_dashes;
  • sanitize_user.
  • Не забудьте, що існують спеціальні утиліти, наприклад, такі як регулярні вирази. Вони мають неймовірно потужними можливостями для визначення тільки визначених рядків і певних послідовностей з набору даних, які можуть бути вилучені для збереження.

    Це тільки половина справи

    Дотепер ми говорили тільки про те, як зберегти інформацію в базу даних WordPress.

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

    Тому в наступній статті ми розглянемо оборотну сторону питання — зокрема, ми збираємося розповісти, як витягти інформацію з бази даних, відсіяти будь-які символи, які потенційно можуть викликати проблеми з виведенням в браузері, і як ці дані обробити.

    Переклад статті «Using for WordPress Web Application Development: Features: Saving Data» був підготовлений дружною командою проекту Сайтостроение від А до Я.