使用WordPress $ wpdb将数据插入WordPress数据库中的表

时间:2012-06-26 11:02:12

标签: php wordpress forms

我正在开始插件开发并遵循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"的Web服务器上运行时获得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-configwp-load.php。如果包含wp-load.php,则$wpdb获取值并且一切正常。

4 个答案:

答案 0 :(得分:5)

包括

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

为我工作

答案 1 :(得分:3)

试试这个..

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

?>

答案 2 :(得分:0)

你现在可能已经想到了这一点,但没有人在这里解决它。您的示例代码包含&#39; $ s&#39;在第3个参数(第2个数组)中,但应该是&#39;%s&#39;因为它是值格式化的。 WP Codex说[http://codex.wordpress.org/Class_Reference/wpdb] $ wpdb-&gt; insert()的格式参数是可选的。

答案 3 :(得分:-1)

我认为你的sql字符串有2个错误。

认为应该将$table_name变量连接起来

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

并删除最后一行的;

相关问题