Вставка данных в пользовательские таблицы

15 окт. 2014 г., 00:15:08
Просмотры: 44.2K
Голосов: 4

Я пытаюсь создать пользовательские формы ввода для отправки данных в пользовательские таблицы в базе данных 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')
    );
}
?>

Буду благодарен за любую помощь

3
Комментарии

Соответствуют ли ваши данные указанным типам данных? У вас включен режим отладки?

s_ha_dum s_ha_dum
15 окт. 2014 г. 00:32:50

Еще одна возможная проблема — наличие пробела в названии таблицы, из-за чего SQL-запрос не может быть корректно обработан.

Nimrod Nimrod
27 окт. 2016 г. 22:51:54

Только что заметил, что вы используете $global $wpdb вместо global $wpdb, скорее всего, ваш код вставки не выполняется.

TomC TomC
26 апр. 2016 г. 13:30:08
Все ответы на вопрос 1
0

Вы сказали, что ваша форма находится в основной папке? Думаю, вам нужно указать правильный 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 используется для вставки данных в существующую таблицу).

17 февр. 2015 г. 16:44:33