会員用ページをつくる


会員用ページをつくる


会員用ページをつくる PHPで会員用ページ(mypage.php)を作成してみましょう。 会員がログインページ(login.php)からログインし、会員用ページ(mypage.php)に会員のユーザーIDが表示されるようにします。 作成するスクリプトは次のとおりです。 ・会員用ページ(mypage.php) ・ログインページ(login.php) スクリプト、といっても完全なスクリプトは提示しません。 MySQLなどの関数やそれを効率よく利用するためにクラスを作成して・・などとなると、本来の会員ページをつくるという目的から外れはしないものの深い森のなかに入っていってしまう可能性があるので・・・。ここではあくまでターゲットを「会員ページをつくる」というところに絞ります。 ログインページ(login.php)をつくる POSTされてきたかどうかで条件分岐 ログインページ(login.php)をつくります。POSTされてきたかどうかで条件分岐させます。 ・POSTされてきた場合は入力されたユーザーIDとパスワードをチェックします。 ・POSTされていない場合はユーザー名とパスワードを入力させるログインページを表示させます。 if ($_SERVER["REQUEST_METHOD"]=="POST"){ //POSTされた場合  (ユーザーIDとパスワードをチェック) }else{ //POSTされなかった場合  (ログインページを表示) } ユーザーIDとパスワードをチェック ユーザーID($id)とパスワード($pw)をチェックします。 (a)ユーザーIDとパスワードが正しければメンバー用のトップページを表示させ、 (b)ユーザーIDとパスワードが正しくなければエラーメッセージとともにログインページを再表示させます。 チェックの流れは以下のようになります。 ①ユーザーIDでユーザー情報テーブルを検索し、ユーザーIDが登録されているかをチェック ②もし登録されていれば、パスワードをチェック。 ③パスワードが正しければメンバーページ(mypage.php)を表示。 メンバーページへのジャンプ メンバーページへのジャンプはどうしたらいいでしょうか。 header関数にLocatoin:を組み合わせて実現します。 header("Location: http://hogehoge/mypage.php"); exit; まとめ ここまでのまとめをしてみます。 login.php if ($_SERVER["REQUEST_METHOD"]=="POST"){ //POSTされた場合 if (ユーザーIDが登録されているか){ if (パスワードは正しいか){ header("Location: http://hogehoge/mypage.php"); exit; }else{ //パスワードが違う場合  (ログインページを表示) }else{ //登録されていない場合  (ログインページを表示) }else{ //POSTされなかった場合  (ログインページを表示) } もう少し修正すると以下のようになります。 login.php if ($_SERVER["REQUEST_METHOD"]=="POST"){ //POSTされた場合 if (ユーザーIDが登録されているか){ if (パスワードは正しいか){ header("Location: http://hogehoge/mypage.php"); exit; } } }  (ログインページを表示) メンバーページ(mypage.php)をつくる・・その前に ユーザーIDとパスワードをチェックして正しければメンバー用のページ(mypage.php)を表示させる、処理の流れはこれで正しいのですが、十分ではありません。ログインページで入力してもらった情報をメンバー用のページに伝える仕組みがありません。 3つの方法があります: (a)URLに情報を含ませる (b)POSTで受け渡す (c)セッションを利用する ここでは「(c)セッションを利用」して情報を伝えたいと思います。 ログインページ(login.php)を修正する セッションについての基本は http://www.heijitsu.net/phpstyle/session.html を参照してください。 セッションの開始 session_start(); セッションを使用するページで宣言します。プログラムに対して「これからセッションを使います」という心の準備をさせてあげます。 セッション用のスーパーグローバル変数 $_SESSION["キー"] = 代入する値 ; ここでは、ユーザーIDを引き渡すので次のように設定しましょう。 $id にはユーザーがログインページで入力したユーザーIDが入っています。 $_SESSION["myid"] = $id ; まとめ セッションを考慮したスクリプトは次のようになります。 login.php session_start(); if ($_SERVER["REQUEST_METHOD"]=="POST"){ //POSTされた場合 if (ユーザーIDが登録されているか){ if (パスワードは正しいか){ $_SESSION["myid"] = $id; header("Location: http://hogehoge/mypage.php"); exit; } } }  (ログインページを表示) これでユーザーIDを引き渡すための一応の準備は整いました。 メンバーページ(mypage.php)をつくる! 準備が整ったのでメンバーページを作ってみましょう。 mypage.php session_start(); $id = $_SESSION["myid"]; //セッションから値を受け取る  (HTMLヘッダーを出力)  print 'あなたのIDは'.$id.'です。';  (HTMLフッターを出力) さあ、完成、完成・・。しかし、このままでは・・・。 メンバーページ(mypage.php)直接アクセスできてしまう!? さあ、完成、完成・・。しかし、このままでは・・・。そう、メンバーページ( http://hogehoge/mypage.php)に誰でも直接アクセスできてしまいます。これを拒む仕組みを入れてみましょう。 まず、ログインページにIDとパスワードのチェック処理を通ったかどうかのフラグ($flg_login)を設けます。これをセッション変数としてメンバーページに引継ぎます。 login.php session_start(); if ($_SERVER["REQUEST_METHOD"]=="POST"){ //POSTされた場合 if (ユーザーIDが登録されているか){ if (パスワードは正しいか){ $_SESSION["myid"] = $id; $_SESSION["flg_login"] = 1; header("Location: http://hogehoge/mypage.php"); exit; } } }  (ログインページを表示) mypage.php session_start(); if($_SESSION[$flg_login] == 1){ //ログインチェックOKならば $id = $_SESSION["myid"];  (HTMLヘッダーを出力)  print 'あなたのIDは'.$id.'です。';  (HTMLフッターを出力) }else{ //ログインチェックNG(直接ページに飛んできた)ならばログインページへジャンプ header("Location: http://hogehoge/login.php"); exit; } クッキーの利用 このスクリプトにクッキー設定を追加することにより、少しだけ便利になります。 http://www.heijitsu.net/phpstyle/membercookie.html