web-dev-qa-db-ja.com

フォームを使用してデータベースにデータを挿入する

データベースに "newsletter"という名前のテーブルを作成し、登録フォームをページに入れるためのショートコードを提供する簡単なプラグインを書いています。フォームには "name"と "email"が含まれています。データベースにフォームデータ(名前+電子メール)を挿入するのに問題があります。私はこれを書きました:

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

しかし、idは機能しません。フォームからデータを取得してテーブルに挿入するにはどうすればよいですか。

4
pixelweb

2つの変数$name$emailは、関数内では不明です。 global $wpdbglobal $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();

あるいは、関数の引数に変数を入れることもできます。

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

または、機能なしで:

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