wpforms.ru wordpress WPForms.ru

Как сделать проверку уникальности вводимого текста в форме

Что такое проверка уникальности и зачем она нужна в WPForms

Проверка уникальности введённых данных в формах WPForms часто требуется, чтобы избежать дублирования записей. Например, при регистрации пользователей, отправке заявок или комментариев, где одно и то же значение (email, номер заказа, код купона) не должно повторяться. WPForms из коробки не поддерживает проверку уникальности, поэтому её нужно реализовать самостоятельно через хук валидации.

Диагностика: как понять, что нужна проверка уникальности

  • Пользователи жалуются, что могут отправлять одинаковые данные несколько раз.
  • В базе или CRM появляются дубликаты, которые мешают учёту.
  • На сайте нет встроенной валидации для уникальных полей (например, email, ID, номер заказа).

Если вы видите подобные симптомы, значит, необходимо добавить проверку уникальности в WPForms.

Пошаговое решение: проверка уникальности поля с помощью PHP-хука

Рассмотрим пример, как проверить уникальность email в форме регистрации или обратной связи. Будем считать, что поле email имеет ключ email.

1. Получить ID формы и ключ поля

Сначала узнайте ID вашей формы в WPForms (например, 123) и ключ поля, который можно посмотреть в настройках поля (например, email).

2. Добавить в functions.php или плагин следующий код:

add_filter('wpforms_process_validate', 'wpforms_validate_unique_email', 10, 3);
function wpforms_validate_unique_email($fields, $entry, $form_data) {
    // Проверяем ID формы
    if ($form_data['id'] != 123) {
        return $fields;
    }

    // Получаем значение email
    $email = '';
    foreach ($fields as $field) {
        if ($field['name'] === 'email') {
            $email = sanitize_email($field['value']);
            break;
        }
    }

    if (!$email) {
        return $fields; // email не заполнен
    }

    global $wpdb;
    // Проверяем, есть ли такой email уже в базе wpforms_entries_meta
    $table = $wpdb->prefix . 'wpforms_entries_meta';
    $query = $wpdb->prepare(
        "SELECT COUNT(*) FROM $table WHERE meta_key = 'email' AND meta_value = %s",
        $email
    );
    $count = $wpdb->get_var($query);

    if ($count > 0) {
        // Добавляем ошибку к полю email
        foreach ($fields as &$field) {
            if ($field['name'] === 'email') {
                $field['error'] = 'Этот email уже зарегистрирован. Пожалуйста, введите другой.';
                $field['error_code'] = 'unique_email';
                break;
            }
        }
    }

    return $fields;
}

3. Проверка работы

Отправьте форму с уже существующим email. Вы должны увидеть ошибку под полем «Этот email уже зарегистрирован» и форма не отправится.

Проверка результата после внедрения

  • Отправка формы с новым email проходит успешно.
  • Отправка формы с повторяющимся email приводит к появлению ошибки валидации.
  • В базе WPForms не создаются дублирующие записи с одинаковым email.

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

Частые ошибки и как их исправить

  • Неправильный ключ поля: В коде укажите именно тот name поля, который в форме. Его можно увидеть в настройках поля WPForms.
  • Неправильный ID формы: Если проверка не срабатывает, проверьте, что ID формы совпадает с тем, что в коде.
  • Ошибка в SQL-запросе: Используйте метод $wpdb->prepare для защиты от SQL-инъекций и корректности запроса.
  • Кэширование форм: Если используется кеширование, оно может мешать обновлению ошибок. Отключите кэш для страниц с формой или используйте AJAX-отправку.

Практические советы по безопасности и производительности

  • Используйте sanitize_email() для очистки данных перед проверкой.
  • Добавляйте проверку только для нужных форм, чтобы не снижать производительность.
  • Если у вас много форм и полей, рассмотрите создание универсальной функции для проверки уникальности с параметрами.
  • Обрабатывайте ошибки аккуратно, чтобы не раскрывать внутренние данные.
  • Для больших сайтов с частыми проверками можно кешировать результаты запросов к базе на короткое время.

Таблица сравнения способов проверки уникальности

МетодПлюсыМинусыКомпромисс
SQL-запрос к wpforms_entries_meta (как в статье)Прямой доступ, работает сразу после отправкиНагрузка на базу, могут быть ложные срабатывания без очисткиОптимизировать запросы, кешировать результаты
Хранение данных в отдельной таблице для уникальных полейБыстрая проверка, меньше нагрузкиДополнительная разработка, синхронизация данныхИспользовать для высоконагруженных проектов
Проверка через AJAX по мере вводаМгновенная обратная связь пользователюСложнее в реализации, требует JS и серверной частиИспользовать для критичных полей (email, логин)
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше