Статьи

WordPress для разработки веб-приложений: сохранение данных

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

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

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

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

Но эта серия о создании приложений поверх WordPress. Для этого важно понимать не только как сохранять информацию, но и как получать информацию.

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

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


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

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

Итак, с учетом сказанного, давайте начнем с рассмотрения того, как мы сохраняем информацию в базе данных WordPress.

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

  • wp_options . Таблица параметров отвечает за хранение фрагментов информации, связанных с настройками, конфигурацией, всем, что связано с настройками, применимыми ко всему сайту.
  • wp_posts . В этой таблице хранятся данные, связанные с сообщениями. Хотя мы не будем напрямую работать с этой таблицей, важно понимать, что она существует, чтобы мы могли работать с метаинформацией.
  • wp_postmeta . Как упоминалось ранее, эта таблица отвечает за хранение метаинформации, связанной с отдельными сообщениями. А поскольку посты могут представлять страницы, посты и пользовательские типы постов, именно здесь вы храните информацию, относящуюся к каждому из ваших типов постов. Он чрезвычайно гибок в типе хранимых данных, так что вы действительно можете иметь большие возможности с точки зрения того, как вы соотносите информацию с сообщениями (независимо от того, к какому типу они относятся).
  • wp_comments . Эта таблица должна быть само собой разумеющейся, но именно здесь хранятся все комментарии для постов, страниц и пользовательских типов постов. Подобно wp_posts , это не то место, где мы будем писать данные напрямую, но важно понимать, что эта таблица существует и что существует таблица метаданных комментариев, к которой мы можем обращаться при записи информации в таблицу.
  • wp_commentmeta . Как уже упоминалось, подобно wp_postmeta , здесь хранятся метаданные о комментариях. И, конечно же, хотя вы не обязательно работаете с комментариями в веб-приложениях по всем направлениям, вы можете в конечном итоге иметь компонент блога для своего приложения. И в этом случае, это помогает узнать, как вы можете читать данные и записывать данные в таблицу.

Очевидно, что это всего лишь общий обзор некоторых таблиц базы данных, на которых основан WordPress. Если вы хотите ознакомиться с остальной информацией хотя бы для собственного издания, обязательно ознакомьтесь с описанием базы данных .

Тем не менее, этого должно быть достаточно, чтобы мы могли стандартно читать и записывать информацию в базу данных.

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

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

  1. Это вопрос понимания доступных API
  2. Важно знать, как санировать данные

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

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

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

add_option принимает три параметра:

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

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

1
add_option( ‘my-name’, ‘tom mcfarlin’ );

Если, с другой стороны, мы хотим взять что-то из коллекции $_POST , то мы можем сделать что-то вроде этого:

1
2
3
if ( isset( $_POST[‘value’] ) && ! empty( $_POST[‘value’] ) {
    add_option( ‘my-value’, $_POST[‘value’] );
}

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

Для пояснения, я не буду вдаваться в подробности об этой конкретной функции. По сути, update_option будет:

  • Добавьте опцию, если она еще не существует
  • Перезаписать существующее значение, если оно существует

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

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

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

Обратите особое внимание на Кодекс :

Создает или обновляет параметр модификации для текущей темы. Наряду с get_theme_mod () эта функция иногда предлагает разработчикам тем более простую альтернативу API настроек, когда необходимо обработать базовые настройки, относящиеся к теме.

Это явно относится к работе с темами.

Честно говоря, работа с мета-публикацией мало чем отличается от работы с опциями. Фактически, вы можете даже рассматривать функции API для сериализации метаданных wp_options и метаданных комментариев практически идентично тому, как параметры хранятся в wp_options данных wp_options .

Короче говоря, функции API содержат три элемента информации:

  1. ID элемента
  2. Ключ данных
  3. Значение данных

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

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

Например, сохранение информации в мета-таблице записей:

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

И, скажем, обновление информации в мета-таблице комментариев будет выглядеть так:

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

В качестве альтернативы вам может понадобиться использовать глобальную переменную $post если метод не вызывается в цикле. Например:

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

И чтобы записать данные в add_comment_meta комментариев, вы следуете точно тому же формату, за исключением того, что вы используете add_comment_meta и update_comment_meta .

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

Легко: очистка данных.


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

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

Чтобы предотвратить это, вы, вероятно, захотите использовать функции PHP, такие как strip_tags и stripslahes , для очистки информации.

Например:

1
2
3
4
5
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.

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

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