会員登録(設計)
次に、今回の作成範囲の機能(2)~機能(3)を作成します。まずは大まかな処理の流れを考えてみましょう。まずはご自身で考えてみてください。
処理の流れが整理できましたか? 例として、次のような手順になります。
- 手順(1):ログイン済であるかを判断。ログインできるということは既に会員登録済のため、テキストボックスに登録済の情報を表示する。
- 手順(2-A):[更新]ボタンがクリックされたタイミングで、既にログイン済であれば
UPDATE
文を実行し、m_customers
テーブルの情報を更新する。 - 手順(2-B):[更新]ボタンがクリックされたタイミングで、ログイン済でなければ
INSERT
文を実行し、m_customers
テーブルに新規で登録する。
いかがでしょうか? 後は、上記の処理の手順をプログラムに落とせば完成です。
会員登録(実装)
それでは、実装に入りましょう。member_ver1.php
を開いてください。既に、処理の大まかな流れは実装済の状態です。35行目付近に「ログイン済であれば、お客様の情報をデータベースより取得。
」と記述されたif
文がありますが、これは手順(1)に対応する処理で、$info
という変数にm_customers
テーブルの情報を格納しています。71行以降の<input>
タグで、次のようにvalue
属性の中に$info
の中身を出力し、テキストボックスの入力値を設定しています。
value="<?php print( $info["customer_code"] ); ?>"
次に、[更新]ボタンがクリックされた時の処理ですが、
if( $_REQUEST["cmd"] == "regist_member" )
というif
文の中で行っています。このif
文の中に更にif~else
があり、
if( $_SESSION["customer_code"] != "" )
がログイン済の場合の処理、すなわち手順(2-A)の処理にあたります。これに対応するelse
文が、ログイン未の場合の処理、すなわち手順(2-B)の処理にあたります。
それでは、手順(2-A)および(2-B)の部分に処理を記述してみてください。member.php
に名前を変更し、動作確認をしてください。
うまく動作しましたか?それでは、解答例です。手順(2-A)は、次のように記述します。
if( $_SESSION["customer_code"] != "" ) { $sql = " update m_customers set "; $sql .= " customer_code = '" . $_REQUEST["customer_code"] . "',"; $sql .= " pass = '" . $_REQUEST["pass"] . "',"; $sql .= " name = '" . $_REQUEST["name"] . "',"; $sql .= " address = '" . $_REQUEST["address"] . "',"; $sql .= " tel = '" . $_REQUEST["tel"] . "',"; $sql .= " mail = '" . $_REQUEST["mail"] . "'"; $sql .= " where customer_code = '" . $_SESSION["customer_code"] . "'"; $res = mysql_query( $sql ); }
手順(2-B)は、次のように記述します。
else { $sql = "insert into m_customers( customer_code, pass, name, address, tel, mail, del_flag, reg_date ) "; $sql .= "values( "; $sql .= " '".$_REQUEST["customer_code"]."', "; $sql .= " '".$_REQUEST["pass"]."', "; $sql .= " '".$_REQUEST["name"]."', "; $sql .= " '".$_REQUEST["address"]."', "; $sql .= " '".$_REQUEST["tel"]."', "; $sql .= " '".$_REQUEST["mail"]."', "; $sql .= " '0', "; $sql .= " now() ) "; $res = mysql_query( $sql ); }
それぞれ、UPDATE
文、INSERT
文の中にテキストボックスの入力値を埋め込み、SQLを実行していることが分かるはずです。もしどのようなSQLが実行されているかが分かり辛い場合は、
print( $sql );
の命令を上記のif~else
文の外に記述し、$sql
の中身を表示してください。
まとめ
今回は、ログイン処理および会員登録画面を実装しました。基礎編に比べるとプログラムの行数は多くなりましたが、そろそろ目も慣れてきはじめた頃かと思います。次回は、PEARというPHPで効率的にコードを書くのに便利な部品について紹介します。
- 通常の変数は、画面遷移をすると変数の中身が消えてしまう。
- 「セッション変数」と呼ばれる特殊な変数を使えば、同じサイト内であればどの画面に遷移しても変数の中身が消える事はない。
- セッション変数は
$_SESSION
という変数名で、プログラムの冒頭にsession_start
命令を記述する事で使用可能となる。