ユーザー登録(入力)ページ(entry.php
)から渡された新規ユーザーのデータはセッション配列$_SESSION['join']
に格納されていますので,それをこのページ(check.php
)でデータベースのmember
テーブルにに登録します。
登録が完了した時には次のような表示を行うようにプログラミングしてみましょう。
PHPスクリプト:check.php
11行目のisset
は変数が存在するかを確認するための関数です。従って,if(!isset($_SESSION['join']))
は,変数$_SESSION['join']
が存在しない時にTRUE
となり,12行目のheader
で入力ページ(entry.php
に強制移動されます。
entry.php
では,$_POST
を$_SESSION['join']
にそのまま代入したため,その内容はフォームで入力したname
ごとの連想配列になっています。
従って,入力内容を取り出すには$_SESSION['join']['○○']
(○○の内容はフォームのinput
タグにおけるname="○○"
)となります。
最後にどこかでセッション情報が再使用されてしまわないよう,$_SESSION['join']
を消去します。
一応これで新規ユーザーの登録ができることになる訳ですが,現状では次の問題が残っています。
2については最後にまとめて実施することにして,ここでは1の対策を施してしまいましょう。これは,同じ名前のユーザーがいないかどうか,INSERT文を発行する前にSELECT文で検索しておき,同名ユーザーがいない場合のみ,INSERT文で登録を実施するようにcheck.php
を改変することで対策が完了します。
一例として,下記のように17行目以降を書き換えて,18行目~25行目のようにSELECT count(*)
を実行してみましょう。これは同名ユーザーが存在している場合(WHERE name="ユーザー名"
に合致)は,1以上の値が返ってくるというSQL文です。
check.phpの改良箇所
実際に,既にデータベースに存在しているユーザー名で登録してみると,
のように表示され,登録ができないようになっている筈です。