web-dev-qa-db-ja.com

WordPress $ wpdbを使用して、WordPressデータベース内のテーブルにデータを挿入する

私はプラグイン開発を始めており、WordPress Codexサイトのチュートリアルに従っています。私は今立ち往生しています-「wp_imlisteningto」というデータベースがあり、wp_が挿入されました:

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

プラグインがアクティブになったとき。

データベース自体には3つの列があり、プラグインがアクティブになったときに設定されます。

$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が、Apacheを実行する別のWebサーバーで実行すると"Page Not Found"が表示されます。

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が値を取得し、すべて問題ありません。

14
AmmyKami83

含む

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

私のために働いた

5
Pramod

これを試して..

<?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));

?>
3
Ajay Patel

あなたはおそらくこれまでにおそらくこれを理解しましたが、誰もここでそれに対処しませんでした。サンプルコードの3番目のパラメーター(2番目の配列)に '$ s'がありますが、値の書式設定のために '%s'にする必要があります。 WP Codexは[ http://codex.wordpress.org/Class_Reference/wpdb] と言います。$ wpdb-> insert()のこのフォーマットパラメーターはオプションです。

0
ultrageek