WordPress

最終更新日:
公開日:

ワークショップ

オリジナルのWordPressプラグインを作る(15)

お問い合わせの削除ページを作成する

お問い合わせ管理プラグインにお問い合わせのデータを削除する機能を実装していきます。

この記事のポイント

  • 削除ページは編集ページをシンプルにしたようなページ
  • 削除ページでもセッショントークンを入れる

目次

選択したお問い合わせの内容を削除する

前回の「編集した内容をデータベースに登録する(2)」まででは、プラグインにお問い合わせのデータを編集する機能を実装してきました。

前回作成したコード:GitHub

今回からはお問い合わせのデータを削除する機能を実装していきます。
今回は削除ページのビューファイルを作成し、トップページの一覧から「削除」リンクを押したらページが表示されるようにしていきます。

削除ページを作成する

削除ページのビューファイルを作成する

ここまでトップページ、編集ページとビューファイルを作成してきました。
今回は削除ページのビューファイルをviewsフォルダdelete.phpという名前で作成してください。

削除ページも編集ページと同様に、これから削除するお問い合わせの内容を確認するためにGETパラメータのidを使ってgetDataFromIdメソッドでデータを取得します。
delete.phpをコードエディタで開いて、以下のコードを記述してください。

views/delete.php

<?php

if( !empty($_GET['id']) ) {

	$data = Cm_Db::getDataFromId($_GET['id']);

}

?>

<p class="link_back"><a href="<?php echo Cm::getBaseUrl(); ?>">戻る</a></p>

<div class="form_area">

<?php if( !empty($data) ): ?>

<form method="post" action="<?php echo Cm::getBaseUrl(); ?>">
<dl class="form_list">
	<dt>お名前</dt>
	<dd><p class="text_delete"><?php if( !empty($data['name']) ){ echo htmlspecialchars( $data['name'], ENT_QUOTES); } ?></p></dd>
	<dt>メールアドレス</dt>
	<dd><p class="text_delete"><?php if( !empty($data['email']) ){ echo htmlspecialchars( $data['email'], ENT_QUOTES); } ?></p></dd>
	<dt>お問い合わせ内容</dt>
	<dd><p class="text_delete"><?php if( !empty($data['content']) ){ echo htmlspecialchars( $data['content'], ENT_QUOTES); } ?></p></dd>
</dl>
<input type="hidden" name="id" value="<?php echo $data['id']; ?>">
<input type="hidden" name="delete_token" value="">
<input type="submit" name="btn_register" value="削除">
</form>

<?php else: ?>

<p>お問い合わせのデータを取得できませんでした。</p>
<p class="link_back"><a href="<?php echo Cm::getBaseUrl(); ?>">戻る</a></p>

<?php endif; ?>

</div>

削除ページは編集ページととてもよく似ています。

GETパラメータで受け取ったidの値からgetDataFromIdメソッドでお問い合わせのデータを取得します。
もし該当するデータが見つからなかったときは、「お問い合わせのデータを取得できませんでした。」というテキストを表示します。

フォームの部分は編集ページと異なります。
削除ページでは内容を表示して確認することが目的になるので、お問い合わせデータの名前、メールアドレス、お問い合わせ内容はフォーム形式ではなくp要素に通常のテキストとして出力します。
データベースから取得したデータですが、ここでもhtmlspecialchars関数による記号のエスケープは忘れずに実行するようにしましょう。

削除ボタンを押したら削除を実行しますが、そのとき削除するお問い合わせデータを特定するためにidとセッショントークンをPOSTパラメータで送信する必要があります。
そのため、この2つは非表示のinput要素として設置します。

削除ページにセッショントークンを入れる

編集ページと同様に、削除ページにもセッショントークンを入れていきます。
変数名は削除ページ用に変更しますが、セッショントークンの作成や確認方法は編集ページと同じ仕組みを使います。
delete.phpを開いて、以下のコードを追加してください。

views/delete.php

<?php

if( !empty($_SESSION['delete_token']) ) {
	unset($_SESSION['delete_token']);
}

$_SESSION['delete_token'] = bin2hex(openssl_random_pseudo_bytes(24));

if( !empty($_GET['id']) ) {

	$data = Cm_Db::getDataFromId($_GET['id']);

}

?>

<p class="link_back"><a href="<?php echo Cm::getBaseUrl(); ?>">戻る</a></p>

<div class="form_area">

<?php if( !empty($data) ): ?>

<form method="post" action="<?php echo Cm::getBaseUrl(); ?>">
<dl class="form_list">
	<dt>お名前</dt>
	<dd><p class="text_delete"><?php if( !empty($data['name']) ){ echo htmlspecialchars( $data['name'], ENT_QUOTES); } ?></p></dd>
	<dt>メールアドレス</dt>
	<dd><p class="text_delete"><?php if( !empty($data['email']) ){ echo htmlspecialchars( $data['email'], ENT_QUOTES); } ?></p></dd>
	<dt>お問い合わせ内容</dt>
	<dd><p class="text_delete"><?php if( !empty($data['content']) ){ echo htmlspecialchars( $data['content'], ENT_QUOTES); } ?></p></dd>
</dl>
<input type="hidden" name="id" value="<?php echo $data['id']; ?>">
<input type="hidden" name="delete_token" value="<?php echo $_SESSION['delete_token']; ?>">
<input type="submit" name="btn_register" value="削除">
</form>

<?php else: ?>

<p>お問い合わせのデータを取得できませんでした。</p>
<p class="link_back"><a href="<?php echo Cm::getBaseUrl(); ?>">戻る</a></p>

<?php endif; ?>

</div>

まずはempty関数を使って$_SESSION['delete_token']にすでにセッショントークンが入っているか確認します。
もし入っていたら、古いセッショントークンなのでunset関数で削除しておきましょう。

続いて、openssl_random_pseudo_bytes関数bin2hex関数で24文字のセッショントークンを作成して$_SESSION['delete_token']に入れておき、ページ中の非表示であるinput要素に出力します。

これで、削除ボタンが押されたらinput要素のname属性のdelete_tokenがPOSTパラメータとして送信され、$_SESSION['delete_token']とPOSTパラメータのセッショントークンが一致するか確認します。

ここまでで削除ページを表示する準備が整いました。
トップページの一覧で削除リンクを押すとGETパラメータでcm=deleteが送信されますが、cmの値によって表示するページを切り替える仕組みは編集ページを作成したときにcontactManager.phpへ追加しているので、今回は変更は必要ありません。

ここまでの変更を保存して、ブラウザでプラグインのページを表示してみましょう。
トップページの一覧から削除するお問い合わせの削除リンクを選択してください。
以下のように、先ほど作成したdelete.phpが表示されます。

削除リンクを押すと削除ページを表示する

今回は削除ページを作成しました。
次回はページにある削除ボタンを押したら削除が実行される機能を実装していきます。

今回作成したコード:GitHub

前のページへ 一覧に戻る 次のページへ