【发布时间】:2012-06-27 16:31:01
【问题描述】:
我正在开始插件开发,并按照 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' ) );
?>
当我提交表单时,当我在 IIS7.0 上运行 Worpdress 中的插件时,我得到一个 Error 500.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 获取值,一切正常。
【问题讨论】:
-
require_once(ABSPATH . 'wp-settings.php');应该也可以。 ABSPATH 定义为@wp-load.php