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

Archives Details

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

PHP

2013.03.31

この記事は最終更新日から1年以上が経過しています。

前回の

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を開いたときの処理となります。

?pre_userid=570515712c7447b2

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

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

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

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

<?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
}
?>

となっております。

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

$pre_userid = $_GET['pre_userid'];

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

$errorFlag = true;

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

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

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

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

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

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

if($errorFlag) { 

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

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

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

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

それ以下の解説を。

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

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

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

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

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

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

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

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

それぞれの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
/* 入力フォームからパラメータを取得 */
$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
}
?>

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

$formList = array('mode','pre_userid','input_userid','input_password','input_name','input_email');

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

$requireList = array('mode','input_userid','input_password','input_name');

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

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

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

$error = array();

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

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

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

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

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

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

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

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

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

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

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

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

<input type="hidden" name="mode" value="user_regist">

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

と、ここまでが

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

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

の流れでした。

次回は、

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

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

となります。

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

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

ではでは。

Comment

Related Article

Laravel 4 を PHP 7 環境へ移行したお話。

2018.06.10

PHP 簡易アクセスログ 出力

2016.04.29

Laravelを 別環境に移動したら画面が真っ白に。MacにComposer、php mcrypt 等をインストールしたお話。

2015.10.10

遅れましたが..あけましておめでとうございます!2015年は Laravelで画像処理。からということで。

2015.01.08

IDE phpstorm, IntelliJ IDEAの Database接続が便利すぎる件(Vagrant + IntelliJ IDEA でMySQL操作)

2014.11.29

Laravel4でもSmartyを使用したい!

2014.11.20

人気急上昇!PHPフレームワーク「Laravel」を使ってみました。簡易会員サイト作成編

2014.09.24

Laravel4 パーミッションエラー Vagrant パーミッションが変更しない件

2014.08.24

【CentOS6】 PHP5.3からPHP5.5にバージョンアップしました

2014.08.11

人気急上昇!PHPフレームワーク「Laravel」を使ってみました。 インストール 〜 起動まで。

2014.08.10

CATEGORY LIST

LATEST NEWS

Jenkins 認証情報「Jenkinsマスター上の~/.sshから」が表示しない

tool

2018.11.17

流れで、Raspberry Pi Zero WHを購入。気がつけばもうラズパイ4台。

RaspberryPi

2018.11.06

安く電子工作を始めるなら、電子パーツ購入は「aitendo」がおすすめ!

RaspberryPi

2018.11.06

ASUS Chromebook Flip C101PAに、Visual Studio Codeをインストール

Chromebook

2018.10.15

Chromebookに、Ubuntu (Xubuntu)をインストールしたあとの日本語入力設定

Chromebook

2018.10.14

ASUS Chromebook Flip C101PAに、Ubuntu (Linux)インストール手順

Chromebook

2018.10.10

nodeのない環境にnodeを導入(HTML5ゲームも提供)し続け、1年数ヶ月経過後、かなり開発環境が整ってきたお話。

JavaScript

2018.09.26

安い!軽い!早い! ノートPC(開発環境)。 Chromebookをついに購入いたしました!

Chromebook

2018.07.22

debian & Xserver XDSLで FireFoxが真っ白のページとなる件

Linux

2018.07.08

Kindle Fire HD 8 にLinuxを導入して扱えるようにする。超コスパ Linux タブレット構築方法!!

Linux

2018.07.04

Laravel 4 を PHP 7 環境へ移行したお話。

PHP

2018.06.10

iPhoneXで、ubuntuを動かす。

サーバー

2018.06.09

RANKING

Follow

SPONSOR

現在、掲載募集中です。



Links

About Us

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

Entry Profile

Graphical FrontEnd Engineer
- Daisuke Takayama

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

FOLLOW US