Вставка данных в пользовательские таблицы
Я пытаюсь создать пользовательские формы ввода для отправки данных в пользовательские таблицы в базе данных WordPress. Мой скрипт не работает. Пользователь должен ввести тип алкогольного напитка, например, водку или виски, добавить описание, и эти данные должны отправиться в базу данных, где есть пользовательские таблицы внутри базы данных WordPress. У меня есть HTML-код на странице WordPress и PHP-код в файле setLiquorType.php, который находится в корневой папке WordPress.
HTML форма
<form method = "post" action = "setLiquorType.php">
Добавить новый тип алкогольного напитка</br></br>
<p>Название: <input type="text" name="name"/></p>
<p>Описание <input type="text" name="description"/></p>
----------------------------------------------
<input type="submit" value="Отправить"/>
</form>
</br>
Мой PHP скрипт
<?php
$name = $_POST['name'];
$global $wpdb, $name, $description;
$table_name = $wpdb->prefix . "Liquor Type";
$wpdb->insert($table_name, array(
'lq_name' => $lq_name,
'description' => $lq_descrip
),array(
'%s',
'%d')
);
}
?>
Буду благодарен за любую помощь

Вы сказали, что ваша форма находится в основной папке? Думаю, вам нужно указать правильный URL для action=""
. Попробуйте так:
action="<?php echo site_url() . '/setLiquorType.php'; ?>"
Лучшей практикой будет разместить код формы в functions.php и оставить атрибут формы action="" пустым. Затем вы можете вызвать функцию формы при её отправке.
HTML вашей формы:
<form method="post" action=""> // изменённый action формы
<h3>Добавить новый тип алкоголя</h3> // обернул заголовок в <h3> и убрал <br>, так как h3 уже имеет отступы (если не задано в style.css, браузер применит стандартные)
<p> // оборачиваем поля в параграфы для автоматического отступа между ними без стилизации
<label for="name">Название:</label> // заменил <p> на <label>
<input type="text" name="name"/>
</p>
<p>
<label for="description">Описание</label>
<input type="text" name="description"/>
</p>
<hr> // заменил ненужные --- на горизонтальную линию
<input type="submit" value="Отправить" name="liquor_submit"/> // добавил атрибут name для проверки отправки формы
</form>
</br>
Теперь в functions.php можно добавить что-то вроде:
// настройка формы
function themename_add_new_liquor() {
$name = $_POST['name'];
$description = $_POST['description']; // Вы забыли собрать данные из поля "description"
global $wpdb; // убрал $name и $description — нет необходимости делать их глобальными
$table_name = $wpdb->prefix . "liquor_type"; // старайтесь не использовать заглавные буквы и пробелы в названиях таблиц БД
$wpdb->insert($table_name, array(
'lq_name' => $name, // заменил несуществующие переменные $lq_name и $lq_descrip на собранные данные — $name и $description
'description' => $description
),
array(
'%s',
'%s'
) // заменил %d на %s — предполагаю, что поле description хранит строки, а не числа
);
}
// Связываем обработчик с формой:
if( isset($_POST['liquor_submit']) ) themename_add_new_liquor();
Надеюсь, это поможет. Также ничто из этого не сработает, если вы предварительно не создали таблицу в базе данных (функция $wpdb->insert
используется для вставки данных в существующую таблицу).
