会員登録(設計)
次に、今回の作成範囲の機能(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命令を記述する事で使用可能となる。

