Когда дело доходит до Интернета, почти любое приложение, которое работает в вашем браузере, поддерживается хранилищем данных какого- либо типа. Обычно эти хранилища данных находятся в форме базы данных.
До недавнего времени большинство приложений создавалось поверх базы данных 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, которые позволяют нам получать информацию, предоставленную как нами, так и / или пользователем.
Таблица опций
Теперь записать информацию в каждую из приведенных выше таблиц действительно просто.
- Это вопрос понимания доступных API
- Важно знать, как санировать данные
Во-первых, мы рассмотрим функции, доступные для чтения, записи и обновления информации в таблицах параметров WordPress.
Добавление и обновление параметров
WordPress предоставляет две функции API-спецификации для записи данных в базу данных. Один приходит в форме добавления информации, другой — в форме обновления информации.
Чтобы добавить информацию в таблицу параметров WordPress, вы должны использовать следующую функцию API.
add_option
принимает три параметра:
- Ключ — или уникальный идентификатор для информации
- Значение данных для хранения
Например, если мы хотим хранить информацию, такую как мое имя, то мы сделаем что-то вроде этого:
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 содержат три элемента информации:
- ID элемента
- Ключ данных
- Значение данных
Таким образом, в случае сохранения информации о записи, идентификатор элемента будет соответствовать идентификатору записи; в случае комментариев идентификатор элемента будет соответствовать идентификатору комментария.
И так же, как и в случае сохранения данных в таблице параметров, важно отметить, что добавление параметра введет этот параметр в базу данных, а обновление параметра создаст этот параметр, если он еще не существует, а затем перезапишет существующее значение в базе данных.
Например, сохранение информации в мета-таблице записей:
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 предоставляет «из коробки»:
-
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.
Нам еще предстоит выяснить, как получить информацию, не говоря уже о том, как на самом деле проверять информацию, поступающую из базы данных.
Итак, в следующей статье мы рассмотрим обратную сторону этой статьи — в частности, мы рассмотрим, как получать информацию из базы данных, избегать любых потенциальных символов, которые потенциально проблематичны при их отображении. в браузер, и как справиться с этим.