phpプログラミング3
phpのプログラミングに関して三回目の書き込みになります。前回の「phpプログラミング2」で作成したMySQLの「モーニング娘。在籍日数等データベース・テーブル」がこれです。
前回はPC側でExcelからCSVファイルを作り、これをMySQLに入れ込むという事をしましたが、メンバーが増えてレコードを追加したり、メンバーが卒業して情報を変更したり、というようにファイルメンテナンスの必要が出てきました。こんなときには、レコード毎の操作をするプログラムを作ると便利です。これには修正・削除・登録の機能が必要となります。
phpのプログラムは最初の「phpプログラミング」の中のWebアプリ方式で説明しました下の図のように、画面を表示すると実行を終了します。ユーザーからの入力待ちという概念がありません。なにしろユーザは気まぐれで、入力画面が表示されても、他のサイトに飛んで行ってしまうかもしれないのですから。
しかし、このようなフローチャートではちょっと複雑になると処理の流れがさっぱりわかりません。そこで、細かなところは省略してはいますが、このような図を描いてみました。これを元にして解説を書いてみます。
セッション管理・ユーザー認証
単にデータを観るだけならば誰にでも権利を与えることはできますが、データの改ざん防止の為にはユーザの権限によってアクセスを制限する事が必要になります。
ログインしてからログアウトするまでのアクセスの事をセッションと言います。今回のようなマスター・ファイル保守というような場合は登録者だけにしかアクセスを許可しないセッション管理が必要です。このような事をさらにユーザ認証と言います。このログイン処理の部分は別のプログラムにしています。
パスワードの部分に文字を入力すると、●●●●のように、黒丸で表示されますが、これは単にhtmlのinput typeをpasswordとしているだけです。問題はその先で、これをMD5暗号化により全く違った文字列に変換して、登録されているパスワードと比較するのです。一致しなければエラーを返します。
このMD5暗号化というのはとても強力です。もしその中身を見ることができたとしても、元のパスワードを知ることはできません。つまり非可逆的なのです。なにしろ作った本人でさえもパスワードを忘れてしまったらどうしようもなくなるのですから。
一覧画面(修正・削除の入り口)
ログインすると最初に表示されるのがこの画面です。
全レコードと言っても何万レコードもある訳ではないので、一気に表示しています。よく見ると右側に「修正」というボタンと「削除」というボタンがあることがわかりますね。下に拡大した画像があります。
当然のことながら、「修正」ボタンを押すと、該当レコードの修正をするプロセスに流れを変えます。
ブラウザ側で修正ボタンを押すと、サーバでは再度このプログラムが読み出されます。すでに認証されているのでログイン処理はパスされます。さらに修正ボタンで行き先を指定して、一覧表示は回避し、修正をするプロセスへと進ませるのです。
修正
一覧表示の修正ボタンにはレコードidをパラメータとしてURI形式で引き渡す工夫をしています。
この修正プロセスでは、渡されたパラメータをさらにmodel内の関数get_member($id)に引き渡して、指定されたレコードを読み出し、各フィールドを修正可能なフォームを表示します。
入力されたデータはチェックします。この例では加入日欄が空白でしたので、その旨が表示されています。
加入日欄では数字しか受け付けないようにします。もしこのように数字以外の文字が入力されると、このようにチェックが入り、その旨表示します。
このようにブラウザからの入力のチェックというのはとても重要です。特に悪意のある操作を防止する意味でもこれは必要不可欠な事なのです。各入力項目毎にそのチェック内容を決めておきます。
入力のチェックに合格したら、このように更新の確認画面を表示します。ここから再修正も可能です。更新ボタンを押すと実際にレコードを書き換えます。実際は、データをmodel内の関数update_member($data)に渡してレコードを更新するわけです。
新規登録
ブラウザのページ上部には操作メニューとして、「新規登録」、「一覧(修正・削除)」そして「Logout」を表示しています。ここから「新規登録」ボタンを押されたら、このように全フィールドが空白の入力画面を表示します。
ここでも、各入力のチェックは厳しく行ないます。合格したら、このように登録確認画面を表示します。ここからさらに修正もできるようにしています。登録ボタンが押されたら、実際にレコードを挿入します。
削除
指定されたレコードを読み出して各フィールドを表示し、削除の確認画面を表示します。
「はい」のボタンが押されたら、実際にレコードを削除してしまいます。
プログラム構成
実際に使っているphpプログラムの構成は以下のようになっています。ただ表示するだけとは違ってちょっと複雑です。
MVC | file name | 概要 |
---|---|---|
Controller | musume_mnt_login.php | ログイン・ログオフ処理 |
musume_mnt.php | プログラム本体 ・Musume_mnt() 初期処理 ・index() 一覧表示 ・post() 新規登録処理 ・_show_post_page() 新規登録ページ表示 ・confirt() 新規登録確認 ・insert() データベース登録 ・_set_validation() バリデーション設定 ・delete() 削除処理 ・update() 修正処理 ・update_confirm() 修正確認 ・update_check() 再修正 ・update_exec() 更新実行 | |
Model | musume_model.php | データベースアクセス・関数などを定義 ・get_member($id) レコードを得る ・update_member($data) レコード更新 ・delete_member($id) レコード削除 ・insert_member($data) レコード挿入 ・等々 |
View | musume_mnt_login.php | ログイン画面 |
musume_mnt_list.php | 一覧表示画面 | |
musume_mnt_update.php | 修正画面 | |
musume_mnt_update_confirm.php | 修正確認画面 | |
musume_mnt_delete_confirm.php | 削除確認画面 | |
musume_mnt_delete_finished.php | 削除完了画面 | |
musume_mnt_post.php | 新規登録画面 | |
musume_mnt_confirm.php | 登録確認画面 | |
musume_mnt_tmpl.php | 結果を表示するテンプレート | |
musume_mnt_header.php | ヘッダー(ナビゲーション・メニュー) |
ここでは「削除」の場合、実際にレコードを削除して無くしていますが、実際のシステム上では削除識別というフィールドを設け、その値を変えることによって削除したことにする、という手法を用います。
たとえば、削除識別がAならば、生きている。Dならば、削除されているという具合に使います。一覧表示などの場合には、削除識別がDのレコードは除けばいいだけです。
この手法だと一度削除してしまったレコードを復活させることが、簡単にできるというメリットがあります。
2015年5月31日 記