Вставка данных в таблицу в базе данных WordPress с использованием WordPress $ wpdb

Я начинаю разработку плагина и слежу за учебниками на сайтах WordPress Codex. Я сейчас застрял – у меня есть база данных под названием «wp_imlisteningto», где wp_ был вставлен с использованием:

 $table_name = $wpdb->prefix . "imlisteningto"; 

Когда плагин активирован.

Сама база данных имеет три столбца, которые настраиваются при активации плагина:

 $sql = "CREATE TABLE $table_name ( id mediumint(9) AUTO_INCREMENT, album VARCHAR(50), artist VARCHAR(50), PRIMARY KEY (id) );"; 

Я пытаюсь вставить данные (путем создания новой строки) в эту базу данных из phpформы.

Внутри администратора WordPress я создаю новую страницу, которая имеет очень простую форму:

 <form action="/wp-content/plugins/listeningto/formhtml.php" method="post"> Album: <input type="text" name="album" /> Artist: <input type="text" name="artist" /> <input type="submit"> </form> 

Который, как вы можете видеть, вызывает formhtml.php , который:

 <?php global $wpdb; $wpdb->insert( $table_name, array( 'album' => $_POST['album'], 'artist' => $_POST['artist'] ), array( '$s', '$s' ) ); ?> 

Когда я отправляю форму, я получаю Error 500.0 при запуске плагина в Worpdress на IIS7.0 и "Page Not Found" при запуске на другом веб-сервере, который запускает apache .

Если я изменил formhtml.php на:

 <?php echo $_POST['album']; echo $_POST['artist']; ?> 

Хорошо работает. Я получаю альбом и исполнителя, которые я вложил в форму. Очевидно, что я ошибаюсь при вставке данных (в новую строку) в базу данных.

Какие-нибудь мысли о том, что это может быть?

ОБНОВИТЬ

Итак, если я обновляю formhtml.php следующим образом:

 <?php require_once('../../../wp-config.php'); $table_name = $wpdb->prefix . "imlisteningto"; $wpdb->insert( $table_name, array( 'album' => $_POST['album'], 'artist' => $_POST['artist'] ), array( '$s', '$s' ) ); ?> 

Я больше не получаю сообщение об ошибке, но данные по-прежнему не попадают в базу данных.

ОБНОВЛЕНИЕ 2

Это сработало для меня:

 <?php require_once('../../../wp-config.php'); global $wpdb; $table_name = $wpdb->prefix . "imlisteningto"; $wpdb->insert( $table_name, array( 'album' => $_POST['album'], 'artist' => $_POST['artist'] ) ); ?> 

как это сделано:

 <?php require_once('../../../wp-load.php'); global $wpdb; $table_name = $wpdb->prefix . "imlisteningto"; $wpdb->insert( $table_name, array( 'album' => $_POST['album'], 'artist' => $_POST['artist'] ) ); ?> 

Итак, по какой-то причине $wpdb не работал, если мне не требовалось wp-config или wp-load.php . Если включить wp-load.php , $wpdb получает значения, и все хорошо.

в том числе

 require_once('../../../wp-config.php'); 

будет работать для меня

Попробуй это..

 <?php global $wpdb; $wpdb->insert( $table_name, array( 'album' => "$_POST['album']", 'artist' => "$_POST['artist']" ) ); ?> 

Пример:

 <?php global $wpdb; $wpdb->insert($table_name , array('chart_name' => "Line Chart" ,'chart_type' => "trends",'status' => 0)); ?> 

Вы, наверное, догадались об этом, но никто здесь не обратился к нему. Ваш пример кода имеет «$ s» в третьем параметре (2-й массив), но это должно быть «% s», потому что оно предназначено для форматирования значений. WP Codex говорит [ http://codex.wordpress.org/Class_Reference/wpdb%5D, что этот параметр формата для $ wpdb-> insert () является необязательным.

Я думаю, что в вашей sql-строке есть две ошибки.

Думайте, что должна быть переменная $table_name должна быть объединена

 $sql = "CREATE TABLE" . $table_name . "( id mediumint(9) AUTO_INCREMENT, album VARCHAR(50), artist VARCHAR(50), PRIMARY KEY (id) )"; 

и удалить ; на последней строке.