2014
5
16

PHP+DBでタイムテーブル型予約システムをつくる 第5回「登録フォーム」

まとめないと忘れちゃうので早めに完結させたい、予約システムづくりの続きです。フォームを作っていきます。あんまりWordPress関係なくなってきてます。


関連記事

ご注意

記事公開当初は「WordPressでタイムテーブル型予約システムをつくる」というタイトルだったのですが、WP4.0まで検証したのち、実装可能ではあるもののやはりWPには不向きだと判断したため記事タイトルを変更しました。

もはや自分でも稼働させていないため、機能追加やバージョンアップ、組み込みサポートのご依頼はお受けしておりませんので、悪しからずご理解ください。

スニペットだけでも何か作る際のお役にたてたら、という気持ちでコードを書き残しておきます。間違いや、お気づきの点がありましたらご指摘下さい。

登録フォームを実装

140516-1

今回はこの部分。

設定時間を決める

140516-2

まずは、このようにドロップダウンに表示される項目のための記述をします。

この、手動設定というところに、

お好みの時間設定と、項目を書きます。

次は、この部分(前回ハイライトやら日付取得やらを書いたところに追記という形で)に、

設定した間隔ごとに、開始時間から終了時間までを格納した$hoursという配列を作成します。

フォームの作成

上記の設定を使って、登録フォームを作成します。

この部分に、

こう書きます。4行目のh($date);は、htmlエスケープする関数を呼び出しているので、第3回の記事を参照してください。開始時間は時間配列の0番目~最後から1番目まで、終了時間は1番目~最後までを表示します。

16行目、開始時間のドロップダウンを選択したら、自動的に終了時間が1間隔プラスされた時間を選択するJavaScriptが起動するように、onChangeを入れておきます。(必要ない場合は消して下さい)

これが起動させるJavaScript。任意の場所に書いてください。

それと、この部分。最終的にはメッセージがあるときだけ出力するという形にするつもりではありますが、これから登録の動作確認もしたいので、暫定で

このように書いておきます。$log1という変数にメッセージが入るようにします。

140516-3

現時点ではこんな感じになりました。CSSはお好みで。

登録する

さて、ではフォームに入力された情報をDBへ書き込む部分を書いていきます。

ここへ。

長いのでハイライト部分を省略してあります。流れとしては、3~5行目でフォームの内容を変数に格納(第3回の記事参照)して6,7行目でDATETIMEフォーマットを整えてから、空欄があったらダメとか、DBへ書き込む前にいろいろ条件をクリアしてるかチェックします。特に17行目、重複するデータの有無を確認するのがちょっとボリューム大きいです。全部クリアできたら21行目へ入ってやっとDBへ書き込みます。

では、端折ったハイライト部分を埋めていきます。(9行目は任意なので、後回し。)

重複データ確認

17行目へ書く部分。$sbm_flgというフラグを立てるかどうか。

WPの場合

1~7行目で、開始時間(日を跨ぐことはないので終了時間でも良いんだけど)が現在選択されている日付$dateに含まれてて、かつ項目名$ipt_cpt_nameが同じものを、DBから抽出。

8~20行目で、抽出したデータ全てを開始時間と終了時間を確認して、重複するところがあったらフラグ$sbm_flgを立てる。(DB操作については第2回の記事をご参照下さい。)

2014/9/2追記:チェックに足りていなかった3つめの条件を追記しました。コメントで教えていただいた中村さん、ありがとうございました!

WP外の場合(PDO)

こんな感じでしょうか。DBへ接続されてることが前提です。接続については第3回の記事をご参照ください。

DBへ書き込み

21行目へ書く部分。

WPの場合

失敗するとfalseが返ってくるので、メッセージを出し分けしてやるとわかりやすいです。

WP外の場合(PDO)

一応これで動いてます!

PDOを使ったやりとりはこちらを参考にさせていただいております、ありがとうございます!

情報をCookieへ保存

任意なのですが、ボタンを押すたびフォーム内の情報が消えてしまうので、名前と所属だけ消えないようにCookieへ保存したい場合。9行目へ書く部分です。

こうして登録ボタンを押したらCookieが保存されるようにしておいて、(保存期間はお好みです)

この部分にクッキーがセットされていたらその値を変数に入れる旨を書いてやります。

簡単に書くとこのような形になると思うのですが、このままでは危ないので、

$_POST と同じく チェック処理をしてから変数に入れてやります。

そして、さっき書いた登録フォームのvalueに、その変数を入れてやればOK。(登録フォームから取得した値なので、htmlエスケープしてやります。)

動作確認

140516-4

「登録しました。」というメッセージが出たら、DBを見てみましょう。ちゃんと情報が入っていたら成功です!わざと一部時間が被るような入力をしてみて、ちゃんとエラーになるかどうかも確認しておきましょう。

さー、次はやっとタイムテーブル部分に…行くつもりです_(:3 」∠)_

  • このエントリーをはてなブックマークに追加
  • follow us in feedly 618
  • RSSを登録

公開日:2014/05/16
更新日:2014/09/02


3件のコメント

  • こやま
    2014年8月12日 2:30 PM

    フォームを入力してもデータベースに入りません。メッセージ覧にもメッセージがでません。テーブル名はrsv_timetableとして、wp-includes/wp-db.phpにも書いていますが。。

    • *you
      2014年8月12日 5:35 PM
      • テーブルは、頭に他と同じ接続子がついた名前(wp_rsv_timetableなど)で作成されているか
      • 各フィールドの属性は正しく設定されているか(idをオートインクリメントにしていないなど、設定漏れはないか)
      • wp-includes/wp-db.phpに確実にテーブルが追加されているか(WPの更新で初期化されることがあります)

      以上のことをお確かめください。また、各記事は説明のためあちこち細切れで書かれていますので、コピペミスしやすいと思われます。最後の記事にある全ソースで試していただいたほうが良いかもしれません。

      それでもダメでしたら、申し訳ありませんが私の手には負いかねますので、wp-config.php のdefine('WP_DEBUG', false);trueにして、エラーメッセージを検索するなど試してみてください。

  • こやま
    2014年9月5日 9:26 PM

    youさん、ありがとうございました。
    全ソースコピペで無事できました。
    今後、どこのソースが間違っていたのかを確認しながら勉強したいと思います。

コメントを残す




*印は必須項目です。コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にですがスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)


back to top