SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

プログラミング未経験から始めるPHP入門

ECサイトの会員登録画面・ログイン機能を作成しよう!
プログラミング未経験から始めるPHP入門~応用編(3)

第10回


  • X ポスト
  • このエントリーをはてなブックマークに追加

ダウンロード サンプルソース (5.6 KB)

セッション情報

 実装に入る前に、セッションと呼ばれる機能に関して説明をしておきます。デモ画面でログインに成功すると、左メニューに次のメッセージが表示されます。

ログイン後、左メニューにメッセージが表示される
ようこそ大家さん!

 このウェルカムメッセージが、商品一覧画面でも商品詳細画面でも表示されていることを確認してください。この「大家」というユーザー名が変数に入っていることは分かると思いますが、通常の変数では、画面遷移をすると変数の中身が消えてしまうため、別の画面に引き継ぐことができません。

 この場合、「セッション変数」と呼ばれる特殊な変数を使います。セッション変数は、同じサイト内であればどの画面に遷移しても変数の中身が消えることはありません

 セッション変数は$_SESSIONという特殊な連想配列です。session_startという命令でセッションを使う意思表示をした後で用います。例えば「大家」というユーザー名を格納するためには、次のように記述します。

「大家」というユーザー名を、セッション変数$_SESSIONに格納
session_start();
$_SESSION["name"] = "大家";
※注意事項

 session_startは必ずプログラムが記述されたファイルの一番上に記述して下さい。

ログイン機能(設計)

 それでは、前述のセッション変数を用い、ログイン機能より実装を進めていきます。まずはphpmyadminにアクセスし、顧客情報のテストデータを確認しましょう。m_customersテーブルの中を見てください。

m_customersテーブルの構造
m_customersテーブルの構造

 3人の顧客情報がテストデータとして登録されているはずです。customer_codeカラムの値が「ログインID」、passカラムの値が「パスワード」となります。

 では、テストデータ内にある「大家正登」というユーザーがログインした場合、入力されたIDとパスワードが正しいことを、SQLで判断するには、どのようにすればいいかを考えてみましょう。例えば、次のようなSQLを実行し、結果が存在するか否かを判断することができます。

m_customersテーブルに入力されたIDとパスワードが存在するか確認する
  SELECT * FROM m_customers WHERE customer_code='<入力されたID>' and pass='<入力されたパスワード>'

ログイン機能(実装)

 それでは、実装に入ります。サンプルソースのitem_list_ver3.phpを開いてください。前回の記事で実装したitem_list.phpに、40行目~65行目の「ログイン処理(1)」とその下の「ログイン処理(2)」を追記したものです。これらの処理の中で、$_SESSION変数の記述が見つかるはずです。

 48行目の「この$sql変数の中身を埋めてください。」と書かれている箇所を探し出して下さい。その直後の49行目に「$sql = "";」と書かれた行があります。この行を上書きし、ログイン成功・失敗を判断するためのSELECT文を記述してみましょう。

動作を確認する場合は、C:\xampp\htdocs\ec\item_list.phpとして上書き保存し、商品一覧画面にアクセスしてください。

 うまく動作しましたか? 設計段階では理解できても、プログラムとして記述するのは難しかったかもしれません。解答は、次のようになります。

ログイン成功・失敗を判断するためのSELECT文
$sql = "select * from m_customers ";
$sql.= "where customer_code = '" . $_REQUEST["login_id"] . "'";
$sql.= "and pass='" . $_REQUEST["login_pass"] . "'";

 「入力されたログインID」のように、テキストボックスの入力値は第5回で説明したとおり、$_REQUEST変数を使います。156行目付近に、下記のようなログインIDのテキストボックスの記述があり、name="login_id"と書かれていることから、$_REQUEST["login_id"]がその入力値を表す変数となります。パスワードも同様です。

入力値の変数名を「login_id」に指定しているhtml
<input name="login_id" type="text" class="text" />

 それでは、解答を踏まえて、プログラムを読み解いていきましょう。SELECT文の結果が取れた時、すなわち正しいIDとパスワードが入力された時に、いくつかの変数をセットしています。プログラムの次の部分です。

$_SESSION["customer_code"] = $_REQUEST["login_id"];
$_SESSION["name"] = $row["name"];
$is_login = 1;

 これらの変数は以下の目的で使用します。

$_SESSION["customer_code"]

 ユーザーがログイン済か否かを判断するために用います。ログインしていない場合には、138行目付近の下記の条件の処理を実行します。

if( $_SESSION["customer_code"] == "")

 ログイン済の場合には、170行目のelse以下の処理を実行します。この条件分岐により、左メニューのログインボタンとログアウトボタンの表示が切り替わります。

$_SESSION["name"]

 ログイン後に表示される「ようこそ○○さん!」というメッセージの、○○の部分にログインユーザー毎の名前を表示させるために使用します。178行目付近の以下の行で使用しています。

ようこそ<span class="person"><?php print($_SESSION["name"])?></span>さん!
$is_login

 ログインに失敗した時のメッセージを出す際に用います。0の場合はログイン失敗、1の場合はログイン成功を現します。149行目付近のif文で用いています。

次のページ
会員登録(設計)

修正履歴

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
プログラミング未経験から始めるPHP入門連載記事一覧

もっと読む

この記事の著者

大家 正登(オオイエ マサト)

デジタルハリウッド『PHP 講座』講師。学生時代、スペイン語を専攻していたものの何故かプログラム言語に心が傾き、近所のフリープログラマーに弟子入り修行。その後中堅 SIer に 3 年間所属し、現在はフリーエンジニア。仕事の傍らジャズを演奏し、コントラバス 2 台と同居中。(ITエンジニア・大家正登のWeb...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4044 2009/07/01 13:17

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング