WordPress

WordPressにお問い合わせページを作成する(5)

  1. 最終更新日:
  2. 公開日:

お問い合わせページでフォームに入力された内容をMySQL(またはMariaDB)に保存する機能を実装します。

この記事のポイント

  • WordPressがイストールされたデータベースの操作では$wpdbクラスのオブジェクトを使う
  • SQLの操作ではプリペアドステートメントを使う

お問い合わせに入力した内容をデータベースに保存する

前回の「WordPressにお問い合わせページを作成する(4)」ではお問い合わせページのフォームにバリデーションを実装してきました。

前回作成したコード:GitHub

今回はフォームに入力された内容をデータベースに保存する機能を実装していきます。

データベースにお問い合わせ内容を保存する
データベースにお問い合わせ内容を保存する

使用するデータベースはWordPressの動作要件を満たすMySQL バージョン7.5以上、またはMariaDB バージョン10.2以上の環境で進めてください。
また、データベースの操作はphpMyAdminを使います。

お問い合わせ内容のデータを保存するテーブルを作成する

まずはデータベースにお問い合わせページで入力されたデータを保存するテーブルを作成します。
phpMyAdminでWordPressをインストールしたデータベースを選択し、「新規作成」を押してください。

「新規作成」を押す
「新規作成」を押す

テーブルの作成画面が開きます。
そこで、テーブル名を「contact」と入力し、以下の5カラムのテーブルを作成してください。

カラム名データ型照合順序属性(その他)
idint(11)PRIMARY KEY(主キー)、AUTO_INCREMENT
namevarchar(10)utf8mb4_unicode_ci
emailvarchar(200)utf8mb4_unicode_ci
contenttextutf8mb4_unicode_ci
createddatetime

idカラムには必ずAIAuto Increment)にチェックを入れて、PrimaryKey(主キー)に設定してください。

作成したcontactテーブル
作成したcontactテーブル

データベース側の準備は整いました。

データベースにデータを保存する

続いて、お問い合わせページで入力された内容をcontactテーブルに保存していきます。
確認ページから完了ページに移動したタイミングの箇所に、データを保存するコードを追加していきます。

page-contact.php

<?php

// フォームの入力できる最大文字数を設定
define( 'MAX_NAME_LIMIT', 10);
define( 'MAX_EMAIL_LIMIT', 100);
define( 'MAX_CONTENT_LIMIT', 100);

// 変数の初期化
$error = array();
$paeg_flag = 1;


if( isset($_POST['btn_confirm']) && $_POST['btn_confirm'] !== null ) {

	$error = validation($_POST);

	if( empty($error) ) {
		$page_flag = 2;
	}

} elseif( isset($_POST['btn_submit']) && $_POST['btn_submit'] !== null ) {

	$error = validation($_POST);

	if( empty($error) ) {	

		global $wpdb;
		date_default_timezone_set('Asia/Tokyo');
		$current_datetime = date('Y-m-d H:i:s');

		$wpdb->insert(
			'contact',
			array(
				'name' => $_POST['input_name'],
				'email' => $_POST['input_email'],
				'content' => $_POST['input_content'],
				'created' => $current_datetime,
			),
			array(
				'%s',
				'%s',
				'%s',
				'%s'
			)
		);

		if( !empty($wpdb->insert_id) ) {

			$page_flag = 3;
		}

	}

}


function validation( $data ) {

----- 省略 -----

データベースへのデータの保存では、WordPressの$wpdbオブジェクトを使って実行します。
こちらのオブジェクトはWordPressがあらかじめグローバル変数として作成するため、globalの宣言をつけて$wpdbを呼び出すと使うことができます。

データベースの操作を実行する際はプリペアドステートメントによる実行が慣習となっていますが、$wpdbオブジェクトinsertメソッドは内部でプリペアドステートメントのprepareメソッドを使ってSQLと値をセットし、queryメソッドで実行します。
そのため、こちらからは改めてprepareメソッドを使う必要はありません。

$wpdbオブジェクトinsert_idプロパティには最後に登録したデータのAUTO_INCREMENTで生成された値が自動的にセットされます。
そこで、insert_idプロパティを参照して値が入っていたらデータの登録をしていたと判断し、$page_flag3をセットして完了ページを表示しています。

ここまでの変更を保存して、ブラウザでお問い合わせページを開いてフォームに入力してみましょう。

お問い合わせページに入力してデータベースに保存されるか確認
お問い合わせページに入力してデータベースに保存されるか確認

完了ページまで進んだら、phpMyAdminでcontactテーブルを確認してみてください。

入力したデータが追加される
入力したデータが追加される

テーブルのデータ一覧の末尾に、入力したデータが登録されていたら成功です。

今回までの内容でようやくお問い合わせページに入力した内容をデータベースに登録するまでの機能が完成しました。
次回は仕上げとして、お問い合わせページに多重送信とCSRF対策(クロスサイトリクエストフォージェリ)を兼ねたセッションを実装します。

Note

お問合せページでは自動的送信メールを設定することが多いですが、今回は入力した内容をデータベースに保存することを主目的とするため実装しません。
もし自動返信メールの実装を行いたい場合は、お問い合わせフォームの作成がテーマになっているワークショップ「お問い合わせフォームを作る」を参照ください。

今回作成したコード:GitHub

前のページWordPressにお問い合わせページを作成する(4)

次のページWordPressにお問い合わせページを作成する(6)

記事一覧

  1. オリジナルのWordPressのプラグインを作る
  2. 最小構成のWordPressプラグインを作る
  3. WordPressにお問い合わせページを作成する(1)
  4. WordPressにお問い合わせページを作成する(2)
  5. WordPressにお問い合わせページを作成する(3)
  6. WordPressにお問い合わせページを作成する(4)
  7. WordPressにお問い合わせページを作成する(5)
  8. WordPressにお問い合わせページを作成する(6)
  9. プラグインのページを表示する
  10. プラグインのトップページを表示する
  11. お問い合わせのデータをデータベースから取得する
  12. お問い合わせの編集ページを作成する
  13. 編集した内容をデータベースに登録する(1)
  14. 編集した内容をデータベースに登録する(2)
  15. お問い合わせの削除ページを作成する
  16. お問い合わせのデータを削除する

前の記事

記事一覧

次の記事