データベースに "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は機能しません。フォームからデータを取得してテーブルに挿入するにはどうすればよいですか。
2つの変数$name
と$email
は、関数内では不明です。 global $wpdb
を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();
あるいは、関数の引数に変数を入れることもできます。
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
) );