Inserir dados no banco de dados usando o formulário

4

Estou escrevendo um plugin simples que cria uma tabela com o nome "newsletter" no banco de dados e forneço um shortcode para colocar um formulário de registro nas páginas. o formulário contém "nome" e "email". Eu tenho problema com a inserção dos dados do formulário (nome + email) no banco de dados. eu escrevi isto:

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

mas o id não funciona. O que devo fazer para obter dados do formulário e inserir na tabela?

    
por pixelweb 14.03.2013 / 14:16

1 resposta

4

As duas variáveis $name e $email são desconhecidas dentro da função. Você precisa disponibilizá-los globalmente dentro dele alterando global $wpdb para 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();

Ou, você pode colocar as variáveis nos argumentos da função:

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

Ou sem função:

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
) );
    
por Mike Madern 14.03.2013 / 14:38