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.
comprenant
require_once('../../../wp-config.php');
a travaillé pour moi
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));
?>
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.