Introduceți date în baza de date utilizând formularul (WordPress, Bază De Date, Formulare, Tabel)

pixelweb a intrebat.

Scriu un plugin simplu care creează un tabel cu numele „newsletter” în baza de date și oferă un shortcode pentru a pune un formular de înregistrare în pagini.formularul conține „nume” și „email”.am o problemă cu inserarea datelor din formular (nume+email) în baza de date.am scris acest lucru:

<?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 id nu funcționează. ce ar trebui să fac pentru a obține datele din formular și a le insera în tabel?

Comentarii

  • Ați adăugat vreun prefix la tabela de newsletter? –  > Por Vinod Dalvi.
  • adăugând prefixul unde anume? tabelul din baza de date are prefixul – –  > Por pixelweb.
  • înainte de numele tabelului pentru că ați folosit acest $table_name = $wpdb->prefix . „newsletter”; în codul dvs. care adaugă prefixul wordpress înainte de numele tabelului newsletter, astfel încât, dacă nu ați adăugat niciun prefix la numele tabelului, atunci utilizați doar numele tabelului astfel $table_name = „newsletter”; –  > Por Vinod Dalvi.
  • Cele două variabile name și email sunt necunoscută în interiorul funcției. Trebuie fie să le definiți în interiorul funcției, fie, dacă sunt necesare în altă parte, să le declarați global (ambele în afara cât și pe în interiorul funcția). –  > Por tfrommen.
  • @VinodDalvi : am adăugat prefixul pentru tabelul din baza de date. –  > Por pixelweb.
1 răspunsuri
Mike Madern

Cele două variabile $name și $email sunt necunoscute în interiorul funcției. Trebuie să le faci disponibile la nivel global în interiorul acesteia prin modificarea lui global $wpdb în global $wpdb, $name, $email:

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

/**
 * After t f's comment about putting global before the variable.
 * Not necessary (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, puteți pune variabilele în argumentele 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
) );

Comentarii

  • Asta am scris. 😉 Încă mai am probleme cu momentul în care trebuie să scriu un comentariu și când este suficient pentru un răspuns. 😉 Variabilele trebuie să fie declarate în continuare global în afara funcției, totuși. –  > Por tfrommen.
  • Haha, da, am văzut comentariul tău după ce am postat răspunsul meu 🙂 regula mea de a comenta/răspunde este, dacă OP trebuie să schimbe mai mult de o regulă din cod, răspunde întotdeauna 😉 Voi adăuga global la variabile $name și $email –  > Por Mike Madern.
  • Ah, bine, se pare că ai dreptate cu domeniul de aplicare (pentru că în acest caz, în afara funcția este domeniul de aplicare global, și nu o clasă). Cu toate acestea, dacă declarați variabilele globale (ceea ce ați decis să faceți acum), trebuie mai întâi să declarați și apoi (în linia următoare sau după punct și virgulă) să stabiliți o valoare. –  > Por tfrommen.
  • atunci când utilizatorul dă click pe submit form 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 în neregulă? –  > Por pixelweb.
  • Într-adevăr, apelați fișierul insertuser() funcția după ce ai declarat funcția? –  > Por Mike Madern.