2012-06-26 12 views
13

Sto avviando lo sviluppo di plug-in e ho seguito i tutorial sui siti di WordPress Codex. Sono ora bloccato - ho un database chiamato "wp_imlisteningto", dove il wp_ stata inserita utilizzando:

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

Quando il plugin è attivato.

La banca dati stessa ha tre colonne, impostare quando si attiva il plugin:

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

Sto cercando di inserire i dati (con la creazione di una nuova riga) in questa base di dati da un modulo php.

All'interno della amministrazione di WordPress, creo una nuova pagina che ha la forma molto semplice:

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

che come potete vedere le chiamate formhtml.php, che è:

<?php 
global $wpdb; 

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

Quando presento il modulo, ottengo un Error 500.0 quando si esegue il plug-in in Worpdress su IIS7.0 e un "Page Not Found" quando si esegue su un altro server Web che esegue apache.

Se cambio formhtml.php a:

<?php 

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

?> 

funziona bene - ho l'album e artista che ho messo in forma. Ovviamente qualcosa che sto facendo male quando si inseriscono i dati (in una nuova riga) nel database.

Qualche idea su cosa potrebbe essere?

UPDATE

Ok, quindi se aggiorno formhtml.php con questo:

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

ottengo non è più un messaggio di errore, ma i dati ancora non ottiene messo nel database.

UPDATE 2

questo ha funzionato per me:

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

come ha fatto questo:

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

Così, per qualche ragione $wpdb non funzionava a meno che non ho richiesto né wp-config o wp-load.php. Se include wp-load.php, $wpdb ottiene i valori e tutto va bene.

+3

require_once (ABSPATH. 'Wp-settings.php'); dovrebbe funzionare pure ABSPATH è definito @ wp-load.php – enam

risposta

2

Prova questo ..

<?php 
global $wpdb; 

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

Es:

<?php 
global $wpdb; 

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

?> 
+0

Ciao Ajay, grazie per la risposta - no, non ha funzionato neanche. Tuttavia, ho aggiornato il mio post con ciò che ha funzionato per me. – AmmyKami83

+0

@MattyRasker Funziona? per maggiori informazioni https://snipt.net/ajaypatel_aj/wordpress-crud-queries/ –

+0

Ciao Ajay, grazie per questo, controllerò. – AmmyKami83

5

compreso

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

lavorerà per me

-1

Penso che ci sono 2 errori si stringa SQL.

penso che dovrebbe essere la variabile $table_name dovrebbero essere concatenati

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

e rimuovere ; sull'ultima riga.

+1

questo è sbagliato, si finirà con: 'CREATE TABLEwp_imlisteningto' –

+0

Notato, ma la creazione del tavolo non era il problema, funzionava bene. – AmmyKami83

0

Probabilmente lo avete già capito, ma nessuno lo ha indirizzato qui. Il tuo codice di esempio ha '$ s' nel 3 ° parametro (2 ° array), ma dovrebbe essere '% s' perché serve per la formattazione del valore. Il codice WP dice [http://codex.wordpress.org/Class_Reference/wpdb] che questo parametro di formato per $ wpdb-> insert() è facoltativo.