システムの構成図にある通り,本システムはログインして認証されたユーザーのみが使用できるようになっています。そのため,ログインしていないユーザーに対しては必ずログイン画面に強制的に移行させるようにしなくてはなりません。ここで構築するindex.php
はシステムのトップに位置するインデックスファイル(後述)であるとともに,ログインのためのフォームを提供するシステムへの入口となるPHPスクリプトでなければなりません。
PHPスクリプト:index.php
4章のデータベース接続の共通化で作成したプログラムをそのまま使用すると
今回作成したデータベースchallenge
ではなく,その前に作成したデータベースと接続してしまいます。dbconnect.php
の中を変更し,データベースchallenge
と接続するプログラムを作成しましょう。
まず初めに気づくことは,これまで作ってきたプログラムと大きく違い,HTMLのタグの前にPHPでのif
判定が来ている所でしょう。ifの判定内容は(!empty($_POST))
となっており,このページに送られてきたmethod="post"
フォームからの入力内容が存在するかどうかを判定しています。$_POST
が存在しない時には,7行目から28行目までは実行されません。
今回使用しているログインのためのフォームのaction
の内容が空白となっています。
これは別のページではなく,現在のページにフォームの内容を返すという意味です。従って,現在のページに$_POST
の内容が送られるので,前述の7行目のif文が実行される,ということになる訳です。
フォームのテキストボックスへの入力の有無にかかわらず,送信ボタンを押した場合は$_POST
が空になることはないので7行目の判定は"true"となります。従って,9行目のif($_POST['mail']!="" && $_POST['pass_word']!="")
が実行されます。
このif文の条件は,入力されたパスワードとメールアドレスが共に空でない場合"true"となります。
そうでなかった場合はelse以降が実行され,変数$error
に文字列が入力されます。この時入力された変数$error
は48行目のif(!empty($error))
の判定に影響を与えます。もし$error
が存在した場合には"true"となり,警告文を出力します。
ログインフォームのパスワード・メールアドレスが共に入力された場合はデータベースとの照合が行われます。
そのためにSELECT命令にWHEREを加え,メールアドレスとパスワードの両方が一致する行があるかどうかを探します。 両方一致する行があれば,セッション配列$_SESSION
に条件に合ったメンバー情報のIDと現在時間の情報を
ここに入力し,次ページ以降も保持される状態にしてからheader('Location: ○○')
を発行してページを○○に移動させています。
適合するメンバー情報が存在しなかった場合は,$record
の中身が入力されないため,変数$error
に文字列が入力されます。
URLの表記として,末端がスラッシュ(/
)で終了する文字列で与えられることがあります。例えばhttp://www.sist.ac.jp/
やhttps://cs-tklab.na-inet.jp/phpdb/
といったものがそれに当たります。スラッシュが省略されることもありますが,その際には自動的に補われています。
このようなURL指定の場合,Webサーバは対応する自身のフォルダ(ディレクトリ)に存在する特定の名前のファイル,あるいは,スクリプトを呼び出して処理を行います。これをインデックスファイル(index file)と呼び,例えばXAMPP for WindowsのApacheでは,設定ファイル(httpd.conf)の中でDirectoryIndex
オプションとして次のようにインデックスファイル名を指定しています。
index.php index.pl index.cgi index.asp index.shtml index.html index.htm \
default.php default.pl default.cgi default.asp default.shtml default.html default.htm \
home.php home.pl home.cgi home.asp home.shtml home.html home.htm
この並びの順に,もしそのディレクトリに(1)index.php
(PHPスクリプト)があればまずこれを最初に呼び出し,存在していなければ(2)index.pl
(Perlスクリプト)を,なければ(3)index.asp
を・・・というようにインデックスファイルを探して処理を行います。index.html
は6番目にありますので,これもインデックスファイルの一つになります。
本システムのように,どんなアクセスに対しても真っ先に呼び出すべきファイルやスクリプトのファイル名は,このインデックスファイルになり得るものにしておいて下さい。