このサイトは、只今WEB業界で活躍中のデザイナー、プログラマーの方々の情報を集めたweb統合情報サイトです。

web帳

記事詳細

2013.03.31

PHP 会員制サイトの制作方法 その2

前回の

PHP 会員制サイトの制作方法

の続きとなります。

準備するファイルとして、

db.php :データベースの接続設定

email_form.php:email登録用テンプレート

email_regist.php:ユーザの仮登録と登録ページURLの送信用ファイル

regist_form.php:仮登録のチェックと会員登録フォームファイル

regist_confirm.php:会員登録内容確認画面ファイル

user_regist.php:会員登録と登録内容送信ファイル

index.php:ユーザー登録処理コントロールページ

とリストアップしたのですが、前回で

db.php :データベースの接続設定

email_form.php:email登録用テンプレート

email_regist.php:ユーザの仮登録と登録ページURLの送信用ファイル

まで作成致しました。

今回は regist_form.php:仮登録のチェックと会員登録フォームファイルから続けて制作していきます。

regist_form.php:仮登録のチェックと会員登録フォームファイル

ここで行う処理は、ユーザーがメールアドレスを登録し仮IDを発行しメールを配信、メールに記載されたURLを開いたときの処理となります。

[code]?pre_userid=570515712c7447b2[/code]

このように、ユーザーはurlにpre_useridの値が付与されたurlを開くことになります。

この値をもとにデータベースに格納されているpre_useridの値と照らし合わせ、ページを表示させます。

ページのイメージとしてはこのような感じです。

それでは、早速ファイルのソースを

[php]<?php
/*pre_useridの値を取得*/
if($mode == "regist_form") {
$pre_userid = $_GET['pre_userid'];
}

/* pre_userid 有効チェック */
$errorFlag = true;

/* データベース接続設定 */
require_once("db.php");

/* 取得したユニークIDをキーに登録されたメールアドレスを取得 */
$query = "select email from members where pre_userid = '$pre_userid'";
$result = mysql_query($query);

/*データベースより取得したメールアドレスを表示*/
if(mysql_num_rows($result) > 0) { //取得した結果のデータの数が0以上なら → データが取得できた
//データが正常に取得できた
$errorFlag = false;
$data = mysql_fetch_array($result);
$email = $data['email'];
}

if($errorFlag) { // pre_useridが無効
?>
<table>
<caption>メールアドレス登録エラー</caption>
<tr>
<td class="item">Error:</td>
<td>このURLは利用できません。<br>もう一度メールアドレスの登録からお願いします。<br> <a href="index.php">会員登録ページ</a></td>
</tr>
</table>
<?php
} else { // pre_useridが有効
// regist_confirmでのエラー表示
if(count($error) > 0) {
foreach($error as $value) {
print $value."<br>";
}
}
?>
<form method="post" action="index.php">
<input type="hidden" name="mode" value="regist_confirm">
<input type="hidden" name="pre_userid" value="<?php print $pre_userid; ?>">
<table>
<caption>会員情報登録フォーム</caption>
<tr>
<td class="item">ユーザー名:</td>
<td><input type="text" size="30" name="input_userid" value="<?php print $input_userid; ?>"></td>
</tr>
<tr>
<td class="item">パスワード:</td>
<td><input type="text" size="30" name="input_password" value="<?php print $input_password; ?>">&nbsp;&nbsp;※ 6文字以上16文字以下</td>
</tr>
<tr>
<td class="item">名前:</td>
<td><input type="text" size="30" name="input_name" value="<?php print $input_name; ?>"></td>
</tr>
<tr>
<td class="item">E-mail:</td>
<td><?php print $email; ?><input type="hidden" name="input_email" value="<?php print $email; ?>"></td>
</tr>
</table>
<div><input type="submit" value=" 送 信 "></div>
</form>
<?php
}
?>[/php]

となっております。

それでは解説を、まず if($mode == "regist_form") { こちらですが、index.phpにて、pre_useridの値が取得できれば、$modeはregist_formに切り替え処理を行う予定ですので、modeはregist_formとなります。

[code]$pre_userid = $_GET['pre_userid'];[/code]

urlからpre_useridをGETで受け取り、変数$pre_useridに代入します。

[code]$errorFlag = true;[/code]

一旦はエラーのフラグをtrueに設定。

[code]$query = "select email from members where pre_userid = '$pre_userid'";
$result = mysql_query($query);[/code]

query文の発行を行います。select文でmembersのカラムから先ほど受け取ったpre_useridの値を条件に検索し、emailの値を取得します。

[code]if(mysql_num_rows($result) > 0) { 
$errorFlag = false;
$data = mysql_fetch_array($result);
$email = $data['email'];
}[/code]

取得したデータが0以上ある場合成功となりますので、その後の処理を。

$errorFlag = false; エラーフラグをfalseにし、mysql_fetch_arrayで連想配列としてemailの値を取得し、変数$emailにemailの値を代入します。

[code]if($errorFlag) { [/code]

ここからはエラーが存在する場合、(errorFlagがtrueの場合)の処理となります。

エラーを促すメッセージを表示させるhtmlとなります。

pre_useridが無効の場合は、それを促すエラーメッセージの表示を行います。

イメージとしては以下のような感じです。

それ以下の解説を。

[code]
} else { 
if(count($error) > 0) {
foreach($error as $value) {
print $value."<br>";
}
}[/code]

この部分は、regist_confirm.phpでformの入力に関するバリデートを軽く行う予定ですので、その際のcount関数にてエラーを数をカウントし、エラー内容を表示させます。

イメージとしては以下の様な感じとなります。

それ以下のhtmlは成功した場合に表示させる入力項目となっております。

ユーザー名、パスワード、名前、E-mailとなっております。

[code]<input type="hidden" name="mode" value="regist_confirm">
<input type="hidden" name="pre_userid" value="<?php print $pre_userid; ?>">[/code]

このinputはsubmitされた際、modeをregist_confirm、pre_useridを受け取った$pre_userid;の値を送るためのinputです。

[code]<td><input type="text" size="30" name="input_userid" value="<?php print $input_userid; ?>"></td>[/code]

それぞれのinput要素のvalueには各値の変数をprintするようになっておりますが、これは、regist_form→ regist_confirm

regist_confirm → regist_formと処理をやり取りする際に入力された時の文字を残しておくためとなります。

regist_confirm.php:会員登録内容確認画面ファイル

ここまでの流れとして、

1.ユーザーがメールアドレスを登録。

2.仮ユーザーID発行登録先のメールアドレスに送信。

3.メールのURLを表示、本登録のformのページ表示。

4.本登録用の情報入力完了。

の後の処理となります。

regist_confirmでは、regist_formで入力された情報を元に処理を行っていきます。

早速ソースの方を

[php]<?php
/* 入力フォームからパラメータを取得 */
$formList = array('mode','pre_userid','input_userid','input_password','input_name','input_email');

/* 必須項目 */
$requireList = array('mode','input_userid','input_password','input_name');

/* ポストデータを取得しパラメータと同名の変数に格納 */
foreach($formList as $value) {
$$value = $_POST[$value];
}

/* エラーメッセージの初期化 */
$error = array();

/* 必須項目入力チェック */
foreach($requireList as $value) {
if($$value == "") {
array_push($error,"入力されていない項目があります。");
break;
}
}

/* パスワードチェック */
if(strlen($input_password) < 6 || strlen($input_password) > 16) {
array_push($error,"パスワードは6文字以上16文字以内でお願いします。");
}
?>
<div class="error-msg">
<?php
/* エラー 入力フォーム表示 $error */
if(count($error) > 0) {
require_once("regist_form.php");
?>
</div>
<?php
} else {
?>
<form method="post" action="index.php">
<input type="hidden" name="mode" value="user_regist">
<table>
<caption>入力情報確認ページ</caption>
<tr>
<td class="item">ユーザー名:</td>
<td><?php print $input_userid;?><input type="hidden" name="input_userid" value="<?php print $input_userid;?>"></td>
</tr>
<tr>
<td class="item">パスワード:</td>
<td><?php print $input_password;?><input type="hidden" name="input_password" value="<?php print $input_password;?>"></td>
</tr>
<tr>
<td class="item">名前:</td>
<td><?php print $input_name;?><input type="hidden" name="input_name" value="<?php print $input_name;?>"></td>
</tr>
<tr>
<td class="item">メールアドレス:</td>
<td><?php print $input_email;?><input type="hidden" name="input_email" value="<?php print $input_email;?>"></td>
</tr>
</table>
<div><input type="submit" value=" 登 録 "></div>
</form>
<?php
}
?>[/php]

それでは順を追って解説を。

[code]$formList = array('mode','pre_userid','input_userid','input_password','input_name','input_email');[/code]

regist_formで入力された情報を変数$formListに格納します。

[code]$requireList = array('mode','input_userid','input_password','input_name');[/code]

こちらは必須項目として変数 $requireList に該当項目を配列で代入。

[code]foreach($formList as $value) {
$$value = $_POST[$value];
}[/code]

ここなんですが、$$と続き、入力ミスぽいのですが、regist_formからPOSTで受け取ったそれぞれのパラメータ($formList as $value)と同名の変数を作成し、それぞれ代入しています。

[code]$error = array();[/code]

エラーメッセージの初期化

[code]foreach($requireList as $value) {
if($$value == "") {
array_push($error,"入力されていない項目があります。");
break;
}
}[/code]

ここは必須項目として $requireListに設定した数だけforeachでループさせ、$$valueで各パラメータ同様の変数の値が空ではないかを調べ、空の場合は $errorに代入しております。

[code]if(strlen($input_password) < 6 || strlen($input_password) > 16) {
array_push($error,"パスワードは6文字以上16文字以内でお願いします。");
}[/code]

strlen関数で文字列の長さを調べております。6文字以上16文字以内に収まらない場合は変数$errorに代入。

[code]<div class="error-msg">
<?php
if(count($error) > 0) {
require_once("regist_form.php");
?>
</div>[/code]

ここでエラーが存在する場合は、regist_form.phpを呼び出します。

エラー内容が表示し、regist_form.phpのフォームが表示します。

regist_formのinput valueに各値の変数をprintするように設定していましたので、入力のあるフォームに関してはそのまま表示します。

それより以下は問題のない場合に表示する確認用のformとなります。

[code]<td><?php print $input_userid;?><input type="hidden" name="input_userid" value="<?php print $input_userid;?>"></td>[/code]

送信ボタンをおされた際、input type="hidden"の各パラメータを送信することになります。

[code]<input type="hidden" name="mode" value="user_regist">[/code]

modeは次のフェーズのuser_registとなる為、切り替え用のinputも用意します。

と、ここまでが

regist_form.php:仮登録のチェックと会員登録フォームファイル

regist_confirm.php:会員登録内容確認画面ファイル

の流れでした。

次回は、

user_regist.php:会員登録と登録内容送信ファイル

index.php:ユーザー登録処理コントロールページ

となります。

今回はここまで。続きは以下になります。

PHP 会員制サイトの制作方法 その3

ではでは。

  • RSSを登録する

  • follow us in feedly

Graphical FrontEnd Engineer
- Daisuke Takayama

MAD CITY 北九州市で生まれ育つ。20代はバンド活動に明け暮れ、ふと「webデザイナーになりたい。」と思い、デジタルハリウッド福岡校入学。卒業後、数々の賞を受賞、web業界をざわつかせる。
現在、港区六本木で活動中。

WEBデザイナーの、WEBデザイナーによる、WEBデザイナーの為のサイト。「みんなで書こう!」と仲間を募ってみたが、結局書くのは自分だけとなってしまいました。日々のメモを綴っていきます。