Использование WordPress для разработки веб-приложений: Элементы (Сохранение данных)

Когда дело касается Интернета, практически для любого приложения, которое работает в браузере, необходимо хранение данных некоторого типа. Как правило, их хранение осуществляется в базах данных.

До недавнего времени большинство приложений были построены на основе 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, которые позволяют нам принимать информацию, представленную нами самими и / или вводимую пользователями.

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

Запись информации в каждую из приведенных выше таблиц осуществляется очень просто.

  1. Это вопрос понимания доступных приложений;
  2. Также важно знать, как обеспечить безопасность данных.

Во-первых, мы собираемся рассмотреть функции, которые доступны для чтения, записи и обновления информации в таблице опций WordPress .

Добавление и обновление опций

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

Чтобы добавить информацию в таблицу опций WordPress, вам нужно использовать следующую функцию.

add_option, которая принимает два параметра:

  1. Ключ — или уникальный идентификатор информации;
  2. Значение данных, которые будут сохранены.

Например, если мы хотите сохранить такую информацию, как, например, собственное имя, вам нужно сделать что-то наподобие этого:

add_option( 'my-name', 'tom mcfarlin' );
И наоборот, если мы хотим прочитать что-то из набора  $_POST , мы можем сделать что-то вроде этого:

	if ( isset( $_POST['value'] ) && ! empty( $_POST['value'] ) {
    add_option( 'my-value', $_POST['value'] );
}

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

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

По существу, update_option делает следующее:

  1. Добавляет опцию, если он не существовала до этого;
  2. Заменяет текущее значение, если опция на данный момент уже существует.

Неплохо, не правда ли?

Несколько слов о модификации темы

Те из вас, кто уже работал с темами 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 предоставляет различные возможности для этих целей:

  1. sanitize_email;
  2. sanitize_file_name;
  3. sanitize_html_class;
  4. sanitize_key;
  5. sanitize_meta;
  6. sanitize_mime_type;
  7. sanitize_option;
  8. sanitize_sql_orderby;
  9. sanitize_text_field;
  10. sanitize_title;
  11. sanitize_title_for_query;
  12. sanitize_title_with_dashes;
  13. sanitize_user.

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

Это только половина дела

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

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

Поэтому в следующей статье мы рассмотрим оборотную сторону вопроса — в частности, мы собираемся рассказать, как извлечь информацию из базы данных, отсеять любые символы, которые потенциально могут вызвать проблемы с выводом в браузере, и как эти данные обработать.

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