Inserire dati nel database utilizzando un form
Sto scrivendo un semplice plugin che crea una tabella chiamata "newsletter" nel database e fornisce uno shortcode per inserire un form di registrazione nelle pagine. Il form contiene "nome" e "email". Ho problemi con l'inserimento dei dati del form (nome+email) nel database. Ho scritto questo codice:
<?php
$name = $_POST['name'];
$email = $_POST['email'];
function insertuser(){
global $wpdb;
$table_name = $wpdb->prefix . "newsletter";
$wpdb->insert($table_name, array('name' => $name, 'email' => $email) );
}
?>
ma non funziona. Cosa devo fare per ottenere i dati dal form e inserirli nella tabella?
Le due variabili $name
e $email
non sono riconosciute all'interno della funzione. Devi renderle disponibili globalmente al suo interno cambiando global $wpdb
in global $wpdb, $name, $email
:
require_once('../../../wp-load.php');
/**
* Dopo il commento di t f riguardo all'uso di global prima della variabile.
* Non necessario (http://php.net/manual/en/language.variables.scope.php)
*/
global $name = $_POST['name'];
global $email = $_POST['email'];
function insertuser(){
global $wpdb, $name, $email;
$table_name = $wpdb->prefix . "newsletter";
$wpdb->insert($table_name, array('name' => $name, 'email' => $email) );
}
insertuser();
Oppure, puoi passare le variabili come argomenti della funzione:
require_once('../../../wp-load.php');
$name = $_POST['name'];
$email = $_POST['email']
function insertuser( $name, $email ) {
global $wpdb;
$table_name = $wpdb->prefix . 'newsletter';
$wpdb->insert( $table_name, array(
'name' => $name,
'email' => $email
) );
}
insertuser( $name, $email );
Oppure, senza funzione:
require_once('../../../wp-load.php');
global $wpdb;
$name = $_POST['name'];
$email = $_POST['email'];
$table_name = $wpdb->prefix . "newsletter";
$wpdb->insert( $table_name, array(
'name' => $name,
'email' => $email
) );

Questo è quello che ho scritto. ;) Ho ancora problemi a capire quando scrivere un commento e quando è sufficiente una risposta. ;) Le variabili devono comunque essere dichiarate global
al di fuori della funzione.

Haha, sì ho visto il tuo commento dopo aver pubblicato la mia risposta :-) La mia regola per commentare/rispondere è: se OP deve modificare più di una regola nel codice, rispondi sempre ;-) Aggiungerò global
alle variabili $name
e $email

Ah, okay, sembri avere ragione riguardo allo scope (perché in questo caso, al di fuori della funzione è lo scope globale, e non una classe). Tuttavia, se dichiari le variabili global (come hai deciso di fare ora), devi prima dichiararle e poi (nella riga successiva, o dopo un punto e virgola) assegnare un valore.

quando l'utente clicca sul pulsante di invio del form, l'azione del form fa riferimento a un file chiamato: regiostration-form.php in questo file ho questo codice ora:
`<?php $name = $_POST['name']; $email = $_POST['email'];
function insertuser(){ global $wpdb, $name, $email; $table_name = $wpdb->prefix . "newsletter"; $wpdb->insert($table_name, array('name' => $name, 'email' => $email) ); } ?> `
ma non funziona ancora. c'è qualcosa di sbagliato?

Hai chiamato la funzione insertuser()
dopo aver dichiarato la funzione?

definire una funzione non la esegue automaticamente. Devi chiamare la funzione per eseguirla. Vedi il codice nella mia risposta ;-)

ho usato il tuo codice ma ho ottenuto due errori: Notice: Trying to get property of non-object in line 8
e Fatal error: Call to a member function insert() on a non-object in line 9

Non è un file caricato da WordPress, vero? Includi il file wp-load.php
all'inizio del tuo script per caricare la libreria di WordPress.

ho usato questo codice e ha funzionato bene: <?php
require_once('../../../wp-load.php');
global $wpdb;
$name = $_POST['name'];
$email = $_POST['email'];
$table_name = $wpdb->prefix . "newsletter";
$wpdb->insert( $table_name, array( 'name' => $name, 'email' => $email ) );
?>
Grazie a tutti ragazzi, in particolare a Mike Madern

sì, per favore aggiorna la risposta con una soluzione completa, poi la accetterò. Cordiali saluti
