ペンション・民宿・プチホテル用 宿泊予約 WordPress プラグインを作る(8)セキュリティ対策
前回紹介したホームページを参考にソースを書き換えてみました。特に標準の option テーブルにレコードたくさん作るのはマナー違反になるらしいのでさっそく修正しました。
option テーブルの読み書き
最初にクラスファイルを修正します。
wp-contents/plugins/drtehotel/class/initialization.php
function update_options() { if ( is_admin() ) { $this->mail = $_POST['DrTE_mail']; $this->mail2 = $_POST['DrTE_mail2']; $op_data = array( 'DrTE_mail' => $this->mail, 'DrTE_mail2' => $this->mail2 ); update_option( 'DrTE_option', $op_data );
option テーブルへのデータ更新を1レコードにしました。データは連想配列で持たせて更新します。実際には受け取るデータ($_POST)の検証作業が必要になってくるでしょう。このメールアドレスの検証がまた色々あるので別に詳しく考えます。
function load_options() { $op_data = get_option( 'DrTE_option' ); $this->mail = $op_data['DrTE_mail']; $this->mail2 = $op_data['DrTE_mail2'];
レコードを読み込んでデータを分解し、プロパティに代入する作業です。
nonce のセキュリティを高める
次は「wp_nonce_field」の引数を二つにしてみました。
function show_init() { echo '<div class="wrap">'; echo '<div id="icon-options-general" class="icon32"> <br /></div><h2>初期設定</h2>'; echo '<form action="" method="post">'; echo "<input type='hidden' name='option_page' value='media' />"; echo '<input type="hidden" name="action" value="update" />'; echo wp_nonce_field('op_update', 'show_init');
当然ですが受け取る側でも変更しておく必要があります。
wp-contents/plugins/drtehotel/drtehotel.php
function show_init_page() { $io = new INIT(); //アップデートの確認 if ($_POST['action']=='update') { if (check_admin_referer('op_update', 'show_init')) { $io->update_options(); $io->comments = '<div id="message" class="updated"> <p>更新しました。</p></div>';
ところがここで問題が。
「本当に実行していいですか ?」とだけ表示されて更新されません。どうやら「check_admin_referer」で引っかかっているようです。
原因を検索しましたが見つかりません。しかたがないので「check_admin_referer(‘op_update’)」でしばらく進むことにしました。もちろん「wp_nonce_field(‘op_update’)」も変更しておきます。
プラグインを削除した時の処理
そういえばプラグインを削除した時に、オリジナルテーブルの削除は書いたけど、オプションのレコード削除は書いていませんでした。コレはシンプルに delete_option( ‘DrTE_option’ ); を uninstall.php に加えれば大丈夫だと思います。
wp-contents/plugins/drtehotel/uninstall.php
if( !defined( 'ABSPATH') && !defined('WP_UNINSTALL_PLUGIN') ) exit(); global $wpdb; $table_name = $wpdb->prefix . 'rooms'; $sql = "DROP TABLE " . $table_name; $results = $wpdb->query( $sql ); delete_option( 'DrTE_option' );
奥が深いメールアドレスの検証
一般的には正規表現を使ってメールアドレスの検証をします。しかしこれが簡単ではありません。ちょっと検索すると色々な話題が出てきて興味深くもありますが、正規表現が苦手な私にはハードルが高くてついていけません。
管理画面なので簡単なチェックでも問題ないような気もしました。しかし今後も出てくるであろうメールアドレスの検証なので、ここは次のページの内容をマルパクリさせていただくということにしました。
http://wada811.blogspot.com/2013/03/best-email-format-check-regex-in-php.html
function isValidEmailFormat を採用させて頂きました。感謝感激です。
wp-contents/plugins/drtehotel/class/initialization.php
function update_options() { if ( is_admin() ) { if($this->isValidEmailFormat($_POST['DrTE_mail'])) { $this->mail = $_POST['DrTE_mail']; }
これで初期設定画面は完成です。form action=”” とか気になるけどいいのだろうか?
Sponsored Link
関連記事
-
-
WordPress用プラグインで使う宿泊予約用カレンダーをPHPで書くぜ
ペンション・民宿・プチホテル用 宿泊予約 WordPress プラグインを作るシリーズで使う、空き部
-
-
ワードプレス用宿泊予約プラグイン開発「空室カレンダー表示」
前回ネットで検索して見つけた calendar($year = "", $month = "") 関
-
-
ペンション・民宿・プチホテル用 宿泊予約 WordPress プラグインを作る(9)空室管理画面を考える
前回までで基本的なプラグインの制作方法を簡単に学びました。今回からは空室管理の画面を作ってみます。柔
-
-
ペンション・民宿・プチホテル用 宿泊予約 WordPress プラグインを作る(2)
前回の物を若干変更しながら、どんどん進んでいきたいと思います。今回は管理画面の表示内容について行って
-
-
ペンション・民宿・プチホテル用 宿泊予約 WordPress プラグインを作る(1)
初心者が、あらためて WordPress のプラグインを一から作る経過報告。たぶん連載記事ですね。途
ご質問は掲示板へお願いいたします。