web-dev-qa-db-fra.com

Insertion de données dans une table dans une base de données WordPress à l'aide de WordPress $ wpdb

Je commence le développement de plugins et ai suivi les tutoriels sur les sites WordPress Codex. Je suis maintenant bloqué. J'ai une base de données appelée "wp_imlisteningto", où le wp_ a été inséré à l'aide de:

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

Lorsque le plugin est activé. 

La base de données elle-même a trois colonnes, configurées lorsque le plugin est activé:

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

J'essaie d'insérer des données (en créant une nouvelle ligne) dans cette base de données à partir d'un formulaire php.

Au sein de l’administrateur WordPress, je crée une nouvelle page au format très simple:

<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>

Comme vous pouvez le voir, les appels formhtml.php, qui est:

<?php
global $wpdb;

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

Lorsque je soumets le formulaire, je reçois un Error 500.0 lors de l'exécution du plug-in dans Worpdress le IIS7.0 et un "Page Not Found" lors de l'exécution sur un autre serveur Web exécutant Apache.

Si je change formhtml.php en:

<?php

echo $_POST['album'];
echo $_POST['artist'];

?>

Fonctionne bien - je reçois l'album et l'artiste que j'ai mis dans la forme. Évidemment, quelque chose que je fais mal lorsque j'insère les données (dans une nouvelle ligne) dans la base de données.

Des idées sur ce que cela pourrait être?

METTRE À JOUR

Ok, donc si je mets à jour formhtml.php avec ceci:

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

Je ne reçois plus de message d'erreur, mais les données ne sont toujours pas enregistrées dans la base de données.

MISE À JOUR 2

Cela a fonctionné pour moi:

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

comme ceci:

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

Donc, pour quelque raison que ce soit, $wpdb ne fonctionnait pas, sauf si j'avais besoin de wp-config ou wp-load.php. Si include wp-load.php, $wpdb obtient des valeurs et tout va bien.

14
AmmyKami83

comprenant

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

a travaillé pour moi

5
Pramod

Essaye ça..

<?php
global $wpdb;

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

Ex: 

<?php
global $wpdb;

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

?>
3
Ajay Patel

Vous avez probablement compris cela maintenant, mais personne ne l'a abordée ici. Votre exemple de code a '$ s' dans le 3ème paramètre (2nd tableau), mais cela devrait être '% s' car il s'agit d'un formatage de valeur. Le WP Codex indique [ http://codex.wordpress.org/Class_Reference/wpdb] que ce paramètre de format pour $ wpdb-> insert () est facultatif.

0
ultrageek