Inserare date în baza de date folosind un formular
Scriu un plugin simplu care creează un tabel numit "newsletter" în baza de date și oferă un shortcode pentru a pune un formular de înregistrare în pagini. Formularul conține câmpurile "nume" și "email". Am o problemă cu inserarea datelor din formular (nume+email) în baza de date. Am scris asta:
<?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) );
}
?>
dar nu funcționează. Ce ar trebui să fac pentru a obține datele din formular și a le insera în tabel?

Cele două variabile $name
și $email
sunt necunoscute în interiorul funcției. Trebuie să le faci disponibile global în interiorul ei schimbând global $wpdb
în global $wpdb, $name, $email
:
require_once('../../../wp-load.php');
/**
* După comentariul lui t f despre folosirea global înaintea variabilei.
* Nu este necesar (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();
Sau, poți pune variabilele ca argumente ale funcției:
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 );
Sau, fără funcție:
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
) );

Asta am scris și eu. ;) Încă am probleme să decid când să scriu un comentariu și când e suficient un răspuns. ;) Dar variabilele tot trebuie declarate global
în afara funcției.

Haha, da, am văzut comentariul tău după ce am postat răspunsul :-) Regula mea pentru comentarii/răspunsuri este: dacă OP trebuie să schimbe mai mult de o regulă în cod, mereu răspund ;-) Voi adăuga global
la variabilele $name
și $email

Ah, bine, se pare că ai dreptate cu scopul (pentru că în acest caz, în afara funcției este domeniul global, nu o clasă). Totuși, dacă declari variabilele globale (ceea ce ai decis să faci acum), mai întâi trebuie să le declari și apoi (în următoarea linie sau după punct și virgulă) să le setezi o valoare.

când utilizatorul apasă pe butonul de trimitere a formularului, acțiunea formularului se referă la un fișier numit: regiostration-form.php în acest fișier am acest cod acum:
`<?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) ); } ?> `
dar nu funcționează din nou. ceva greșit?

definirea unei funcții nu o execută automat. Trebuie să apelezi funcția pentru a o executa. Vezi codul din răspunsul meu ;-)

am folosit codul tău dar am primit două erori: Notice: Trying to get property of non-object in line 8
și Fatal error: Call to a member function insert() on a non-object in line 9

Nu este un fișier încărcat de WordPress, corect? Folosește require
pentru fișierul wp-load.php
în partea de sus a scriptului tău pentru a încărca biblioteca WordPress.

am folosit acest cod și a funcționat perfect: <?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 ) );
?>
Mulțumesc tuturor, în special lui Mike Madern

da, te rog actualizează răspunsul cu un răspuns complet și apoi îl voi accepta. Cu sinceritate
