terms и emsg – проверка и сообщения об ошибках

Атрибут terms – задает условие проверки значения.
В условии используется мини php код, мини означает то, что набор операторов и функций жестко ограничен. Ограничение связано с использованием потенциально небезопасной функцией eval(). В коде разрешено применять любые не словарные символы (не буквы) в частности арифметические (+ – * /), битовые (! || &&), скобки, точку, току с запятой и другие.
Знак доллара $ означает само значение, которое ввел пользователь.
Атрибут emsg содержит сообщение об ошибке. Если вы задали terms, но не задали emsg будет выведено стандартное предупреждение – “Error in field name ads_myvar!” (Ошибка в поле с именем ads_myvar!).
Простейший пример:

Логические операторы:

  • or, OR – логическое ИЛИ
  • and, AND – логическое И
  • xor, XOR – исключающее ИЛИ
  • ! – отрицание НЕ

Список функций:

  • int проверяет, является ли тип переменной целочисленным по типу is_int() но правильно определяет целое число в строке пример использования int($) – значение целое число
  • is_string является ли значение строкой
  • is_numeric значение является числом (целое или дробное), правильно определяет число в строке
  • is_float значение есть число с плавающей точкой
  • is_array в поле содержится массив
  • strlen вычисляет длину строки
  • empty поле содержит пустое значение null
  • current возвращает текущий элемент массива, в нашем случае это будет всегда первый элемент
  • count подсчитывает кол-во элементов массива

За более подробными разъяснениями обратитесь к документации php.
Перейдем к примерам.
Проверка интервала:

Проверяем длину текста:

Проверяем ввод числа:

В некоторых случаях поле может содержать массив данных, как например, когда вы используете шорткод [ads_checkbox_area] – область независимых переключателей (галочки).
Проверить сколько отмечено галочек, нам нужно не более 5:

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

Комментарии 20 к “terms и emsg – проверка и сообщения об ошибках”

  1. OlegT:

    Вот подскажите, база записей у меня импортирована через стандартный импортер WP с другого хостинга. При попытке редактирования записи, выдает ошибку и отображает в форме редактирования: “Error when loading data. Record created on the page with the post_name = , it may have been removed. Current page form has a post_name = add-organization-3. Editing can be extended, but errors may occur.”

    При этом сбрасывает все категории, а текстовые поля остаются.

    Если запись создавать с нуля, то она прекрасно встает в форму редактирования.

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

  2. admin:

    версия 4 плагина позволяет создавать сколько угодно форм ввода вы можете сделать на одном сайте доску объявлений, гостевую книгу, какой нибудь каталог – но в каждом случае формы ввода, набор мета полей будет разным – это понятно думаю.
    Соответственно проверка полей также выполняется по разным правилам.
    поэтому правильно редактировать запись плагин запоминает страницу с формой ввода для каждого объявления ads_form_id – хранится id формы, ads_form_name – имя формы post_name

    когда вы кликаете на ссылке редактировать плагин проверяет соответствие формы и если надо происходит редирект на ту форму в которой было создано объявление

    теперь как я понял вы импортируете старую базу данных в объявлениях отсутствует поля ads_form_name и ads_form_id поэтому вам выдает предупреждение
    и далее объявление загружается в ту форму которую вы прописали в админке

    теперь что касается категорий при импорте у вас скорей всего не совпали ID категорий
    если вы импортируете xml файл вместе с категориями то наверняка они дублировались посмотрите внимательно, что там у вас с категориями происходит

    чтобы записи правильно встали по своим категориям для начала проверьте чтобы совпадали ярлыки категорий на новом и на старом сайте
    затем импортируйте xml файл без категорий то есть надо выбрать только записи пимпочку

  3. OlegT:

    После импорта, категории перенеслись в новую базу с новыми ID, я поднастроил шаблоны формы, чтобы они ориентировались на новые ID категорий, ну например в полях селекта. Визуально, все работает, импортированные записи показывают категории, при нажатии на линк категории происходит правильный переход. Однако ошибка и сброс происходит в момент попытки редактирования записи.

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

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

  4. admin:

    надо по месту разбираться высылай на почту ftp админку WP
    и ссылки на новые записи , пример старых импортированных записей, ссылки на старые записи которые уже редактировали

  5. Игорь:

    Доброго времени суток! Отличный плагин! Спасибо, админ! Но у меня странный и непонятный косяк:( Делаю проверку полей на ввод только кириллицей функцией !preg_match в самом скрипте формы, а функция видит не все буквы русского алфавита и квантификаторы не правильно обрабатываюся:( Подскажите, плиз, где рыться!

  6. admin:

    патерн на проверку только русских букв и пробела
    ~[А-Яа-я\s]+~usi
    и не забыть файл сохранить в UTF8 без бом

  7. Игорь:

    Доброго времени суток! А как проверить e-mail на валидность?
    Спасибо!

    • admin:

      для более детальной проверки данных можно подключить фильтр
      ads_check_fields для этого посмотри нужно создать файл ads_config.php в комплекте есть файл ads_config.php_ там есть пример как проверить email достаточно раскомментировать нужный код
      а вместо sanitize_email() можно попробовать is_email() есть такая новая функция в WP

  8. WildDeer:

    Здравствуйте!
    А возможно сделать заголовок и текст не обязательными полями?
    Нужно чтобы в пост загружалась одна лишь картинка

    Пробовал удалять эти поля,не помогло
    Все время выдает ошибку “Ошибка: Введите текст или заголовок!”

    Заранее спасибо!

  9. Олег:

    Подскажите, а как сделать проверку корректно введенного емейла?

    • admin:

      механизм стандартный для WP – подключить свой фильтр чуть выше я писал подробно про это

  10. Здравствуйте! Я на своём сайте сделал доску объявлений с помощью шаблонов и каталог с помощью шорткодов. Возникла проблема. При размещении информации в каталог возник конфликт с файлом ads_config.php, точнее с выводом сообщений о том что не заполнены поля, Которых нет в форме каталога! Когда переписал “вывод” ошибок в файл form_default_template проблема исчезла.

  11. Иван:

    Добрый день!
    Создал страницу с выводом формы заполнения и добавил фильтры:
    [AdsForm]
    [ads_breadcrumbs]
    Заголовок:[ads_input name="post_title" terms=$ emsg="Требуется заголовок!" /]
    Текст: [ads_textarea name = post_content cols=50 rows=10 terms="strlen($)>20" emsg="Текст описания должен быть больше 20 символов!" /]
    Цена: [ads_input name="ads_price" size=5 terms="is_numeric($)" emsg="введите цену!" /]
    Телефон: [ads_input name="ads_phone" terms=$ emsg="Требуется телефон!"/]
    Email: [ads_input name="ads_email" terms=$ emsg="Требуется емаил!"/]
    С условиями согласен: [ads_input name='ads_ok' type="checkbox" terms="$" emsg="Надо принять условия !" /]
    Загрузка файлов:
    [ads_file name=0]
    [ads_file name=1]
    [ads_file name=2]
    [ads_buttons]
    [/AdsForm]
    Проблема состоит в том что при неверных значениях фильтры выводят ошибки, но запись всеравно добавляется, даже если не вводить Заголовок.

    Подскажите пожалуйста, в каком файле и что нужно изменить чтобы запись не добавлялась(публиковалась) если есть ошибки?

  12. елена:

    Здравствуйте,подскажите пожалуйста как убрать поле цена и поля загрузки файла

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url=""> [php]…[/php] [html]…[/html] [css]…[/css] [text]…[/text] [code]…[/code]