Хранение данных GravityForm в phpmyadmin (mysql)

Вопрос или проблема

В настоящее время я разрабатываю небольшой портал на WordPress для клиента, где пользователям необходимо отправлять формы (созданные с помощью Gravity Forms). Я хотел бы иметь возможность сохранять данные из этих форм после подачи в пользовательскую базу данных, которую я создал в phpmyadmin. У меня все таблицы и структура настроены, но я не знаю, как передать данные.

Я знаю, что в конечном итоге мне нужно использовать хуки ‘gform_after_submission’, но не знаю, с чего начать.

Спасибо!

Вы можете использовать что-то вроде следующего. В основном, после отправки формы мы получаем данные $entry, извлекаем значения, которые нам нужны (в примере $val1, $val2, $val3), затем вставляем эти данные в пользовательскую таблицу с помощью $wpdb:

add_action('gform_after_submission', 'save_to_my_custom_table', 10, 2);
function save_to_my_custom_table($entry, $form)
{
  global $wpdb;

  // обновите имя вашей таблицы (это предполагает, что таблица находится в той же базе данных, что и другие wp таблицы)
  $tablename = $wpdb->prefix . "my_custom_tablename";

  // извлекаем значения из записи
  $val1 = rgar( $entry, '1' );
  $val2 = rgar($entry, '2');
  $val3 = rgar($entry, '3');

  // базовая вставка
  $sql = "INSERT INTO `$tablename` (`val1`,`val2`, `val3`) values (%s, %s, %d)";

  // используем подготовленный оператор
  $stmt = $wpdb->prepare($sql, $val1, $val2, $val3);

  // выполняем запрос
  $wpdb->query($stmt);
}

Если вы хотите подключиться к базе данных, полностью отличной от приложения WP, я думаю, вам стоит рассмотреть возможность настройки API для связи между ними. В этом случае вы все равно можете подойти к этому очень похоже. См. ниже:

add_action('gform_after_submission', 'save_to_my_custom_table', 10, 2);
function save_to_my_custom_table($entry, $form)
{
  global $wpdb;

  // обновите имя вашей таблицы (это предполагает, что таблица находится в той же базе данных, что и другие wp таблицы)
  $tablename = $wpdb->prefix . "my_custom_tablename";

  // извлекаем значения из записи
  $val1 = rgar( $entry, '1' );
  $val2 = rgar($entry, '2');
  $val3 = rgar($entry, '3');

  // отправляем POST запрос к API для другой базы данных
  $endpoint="api.example.com";

  $body = [
      'val1'  => $val1,
      'val2'  => $val2,
      'val3'  => $val3,
  ];

  $body = wp_json_encode( $body );

  $options = [
      'body'        => $body,
      'headers'     => [
          'Content-Type' => 'application/json',
      ],
      'timeout'     => 60,
      'redirection' => 5,
      'blocking'    => true,
      'httpversion' => '1.0',
      'sslverify'   => false,
      'data_format' => 'body',
  ];

  wp_remote_post( $endpoint, $options );
}

Ответ или решение

Чтобы хранить данные форм, собранные с помощью плагина Gravity Forms, в базе данных, созданной с помощью phpMyAdmin, вам нужно использовать хук gform_after_submission. Этот хук срабатывает сразу после того, как форма отправлена и позволяет вам выполнять дополнительные действия, такие как запись данных в пользовательскую таблицу. Ниже приведены шаги и пример реализации этого процесса.

Шаг 1: Создание пользовательской таблицы

Прежде всего, убедитесь, что у вас есть таблица для сохранения данных. Например, вы можете создать таблицу с именем my_custom_tablename с такими полями, как id, val1, val2 и val3.

CREATE TABLE my_custom_tablename (
    id INT AUTO_INCREMENT PRIMARY KEY,
    val1 VARCHAR(255),
    val2 VARCHAR(255),
    val3 INT
);

Шаг 2: Использование хука gform_after_submission

Добавьте следующий код в файл functions.php вашей темы или в специальный плагин. Этот код сохранит данные формы в вашей пользовательской таблице.

add_action('gform_after_submission', 'save_to_my_custom_table', 10, 2);
function save_to_my_custom_table($entry, $form)
{
    global $wpdb;

    // Укажите вашу таблицу (это предполагает, что таблица находится в той же базе данных, что и другие таблицы WP)
    $tablename = $wpdb->prefix . "my_custom_tablename";

    // Извлечение значений из сущности entry
    $val1 = rgar($entry, '1'); // Замените '1' на ID поля формы
    $val2 = rgar($entry, '2'); // Замените '2' на ID поля формы
    $val3 = rgar($entry, '3'); // Замените '3' на ID поля формы

    // SQL запрос на вставку данных
    $sql = "INSERT INTO `$tablename` (`val1`, `val2`, `val3`) VALUES (%s, %s, %d)";

    // Подготовка запроса
    $stmt = $wpdb->prepare($sql, $val1, $val2, $val3);

    // Выполнение запроса
    $wpdb->query($stmt);
}

Шаг 3: Проверка и отладка

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

Альтернативный вариант: Использование API

Если вы хотите сохранить данные в базе данных, которая не связана с вашей установкой WordPress, вы можете настроить API для обмена данными между сайтами.

Пример отправки данных через API выглядит следующим образом:

add_action('gform_after_submission', 'send_api_request', 10, 2);
function send_api_request($entry, $form)
{
    // Сбор данных
    $val1 = rgar($entry, '1');
    $val2 = rgar($entry, '2');
    $val3 = rgar($entry, '3');

    // Конфигурация API
    $endpoint = "https://api.example.com";
    $body = json_encode(['val1' => $val1, 'val2' => $val2, 'val3' => $val3]);

    $options = [
        'body'        => $body,
        'headers'     => ['Content-Type' => 'application/json'],
        'timeout'     => 60,
        'blocking'    => true,
    ];

    // Отправка POST-запроса
    wp_remote_post($endpoint, $options);
}

Заключение

Используя предоставленный код, вы сможете эффективно сохранять данные форм Gravity Forms в вашей пользовательской таблице MySQL, управляемой через phpMyAdmin. Убедитесь, что вы протестировали функциональность и отладили код для надёжного сохранения данных. Если у вас возникли дополнительные вопросы или вам нужна помощь с конкретными ошибками, не стесняйтесь обращаться за помощью в сообщество WordPress или к эксперту в области веб-разработки.

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

Капча загружается...