web-dev-qa-db-fra.com

Insérer des données dans la base de données en utilisant un formulaire

J'écris un simple plugin qui crée une table avec le nom "newsletter" dans la base de données et fournit un shortcode pour mettre un formulaire d'inscription dans les pages. le formulaire contient "nom" et "email". J'ai du mal à insérer les données du formulaire (nom + email) dans la base de données. j'ai écrit ceci:

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

mais id ne fonctionne pas. Que dois-je faire pour obtenir des données du formulaire et les insérer dans un tableau?

4
pixelweb

Les deux variables $name et $email sont inconnues dans la fonction. Vous devez les rendre globalement disponibles en modifiant global $wpdb en 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, vous pouvez mettre les variables dans les arguments de la fonction:

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, sans fonction:

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
) );
4
Mike Madern