14

我正在开始插件开发,并按照 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. 如果 include wp-load.php$wpdb获取值,一切都很好。

4

6 回答 6

5

包含

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

为我工作

于 2012-07-17T07:21:33.873 回答
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));

?>
于 2012-06-26T13:32:42.460 回答
0

您现在可能已经想到了这一点,但没有人在这里解决它。您的示例代码在第三个参数(第二个数组)中有“$s”,但这应该是“%s”,因为它用于值格式。WP Codex 说 [ http://codex.wordpress.org/Class_Reference/wpdb]这个格式参数 $wpdb->insert() 是可选的。

于 2015-02-13T10:42:47.250 回答
0

根据 DB 表创建数组。然后使用 WP insert 。

 global $wpdb;
 $order = [
            'product_id' =>'1',
            'discount' => '1',
            'total' => '1',
            'status' => '1',
            'payment_method' => '1',
            'payment_reference' => '1',
            'sold_by' => '1'
        ];

$wpdb->insert('DB_TABLE_NAME', $order );
于 2021-10-19T11:37:18.533 回答
0
  $global $wpdb;      
  $table_name1 = $wpdb->prefix.'php_crud';  
    
  $data_insert= array(                      
                    'uname1' => $uname1,
                    'uemail1' => $uemail1,
                    'upass1' => $upass1,
                    'language1' => $language1,
                    'gender1' => $gender1,
                    'ustate1' => $ustate1,
                    'file1' => $finalimg
                    );
 $form_insert1=$wpdb->insert($table_name1,$data_insert);
 if($form_insert1)
 {
    echo "<div class='container' style{ color:red;} >Form 
    Submitted Successfully<div>";   
}
else
{
    echo "ERROR";
}
于 2021-10-19T07:47:01.707 回答
-1

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

认为它应该是$table_name应该连接的变量

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

并在最后一行删除;

于 2014-09-18T12:51:02.033 回答