忍者ブログ
バナヤンの忍者風呂
忍者ブログのカスタマイズ、各種WEBツールのテストなど試行錯誤の日々。 VMLによる地図の作成を研究していましたが、一時中断して、今はPHPを勉強しているところです。
ニュース
この欄には、このブログの内容に関連するニュースを掲載する予定です。
お知らせ
この欄には管理人からのお知らせなどを掲載します。
[61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71]

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

PHP+SQLite 会員登録システム(SQLite版)

PHP+SQLiteによる会員登録システムのサンプルを紹介します。

すでにテキストファイルベースやPHPファイルベースの会員情報ファイルについては「PHP 会員登録システム(テキストファイル版) 」、「会員登録システム(PHPファイル版)」で紹介しました。

前回の「PHP+SQLite 登録済チェック」で、PHP+SQLiteによる登録済みユーザーIDのチェック方法がわかりました。残っているのは、ユーザー情報をテーブルに入力する部分です。

SQLiteでのデータの入力は「INSERT INTO テーブル名 VALUES(値リスト)」です。これを用いて、データ登録の部分を次のように記述しました。


#### データ登録
$value_list="\'".$_POST['usrid']."\',\'".$pwd."\',\'".$_POST['mail']
."\',\'".$mailcode."\'";
$query = "INSERT INTO member VALUES (" .$value_list. ")";
$query = htmlspecialchars($query) ;
$query = str_replace("\\","",$query);
$result = sqlite_query($db,$query);
sqlite_close($db);


全体のソースを示す前に、表示画面のイメージを紹介しましょう。

[入力画面]
データ入力画面サンプル

[確認・修正画面]
データ確認・修正画面サンプル

[登録画面]
データ登録画面サンプル

以上のように画面が遷移していきます。入力したデータが実際にテーブルに入力されたか確認したのが、次の画像です。

[メンバー情報テーブルの内容]
メンバー情報テーブルのサンプル

なお、登録されたメールアドレス宛に次の内容のメールが送信されます。

------------------------------------------------------------
差出人:welcome@banayan.com
件 名:登録の確認について

ご登録ありがとうございます。
下記のURLにブラウザでアクセスすると会員登録が完了します。
http://banayan.com/member/confirm_mail.php?mailcode=ece926d8c0356205276a45266d361161
-------------------------------------------------------------

[ソース]会員登録システム(PHP+SQLite版)仮登録ページ

<?php
#########################メッセージ初期値&受信データチェック
if(ereg("^[a-z][a-z0-9_-]{2,15}$",$_POST["usrid"] )) {
#################受信データusrid重複チェック
###########メンバーデータ読込み・比較
$db = sqlite_open('memberdb');
if(!($db)){
die("データベースをオープンできません。");
}else{
$query = "SELECT usrid FROM member WHERE usrid = '".$_POST['usrid']."'";
$query = htmlspecialchars($query) ;
$query = str_replace("\\","",$query);
$result = sqlite_query($db,$query);
$rows = sqlite_num_rows($result);
if($rows==0){
$msg_usrid ="";
}else{
$msg_usrid ="同じ値のデータがあります。";
}
}
}else{
$msg_usrid = "半角小文字の英数字、アンダーバー「_」、ハイフン「-」で3文字以上16文字以内。";
}
if(ereg("^[a-z][a-z0-9_-]{2,15}$",$_POST["pwd"] )){
$msg_pwd = "";
}else{
$msg_pwd = "半角小文字の英数字、アンダーバー「_」、ハイフン「-」で3文字以上16文字以内。";
}
if(ereg("(^[a-zA-Z0-9!#$%&'*+/=?^_`{|}~.-]+)@([a-zA-Z0-9_.-]+)$", $_POST["mail"])) {
$msg_mail = "";
}else{
$msg_mail = "間違いのないようメールアドレスを入力して下さい。";
}
$notice = $msg_usrid.$msg_pwd.$msg_mail;
#########################画面モード
if($notice == ""){
$mode="checked";
$title="データ確認・修正画面";
$msg="本当に間違いがないか確認して「登録」ボタンをクリックして下さい。
修正する場合は入力のうえ「チェック」ボタンを押して下さい。";
}else{
$mode="input";
$title ="データ入力画面";
$msg="入力ミスに気をつけて下さい。
間違いがなければ「チェック」ボタンを押して下さい。";
}
if($_POST['regist']){
$mode="regist";
$title ="データ登録画面";
$msg="下記内容で仮登録します。";
}
?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta http-equiv="Pragma" content="no-cache">
<title>メンバー登録データ・チェック</title>
</head>
<body>
<h1><?= $title ?></h1>
<p><?= $msg ?></p>
<form method='post' action="<?= $_SERVER[PHP_SELF] ?>">
<table style="border:#000 solid 1px;empty-cells:show;">
<tr><th>項目</th><th>登録する値</th><th>備考</th></tr>
<tr>
<th>ユーザーid</th>
<td><input type='text' name='usrid' value="<?= $_POST["usrid"] ?>"></td>
<td><?= $msg_usrid ?></td>
</tr>
<tr>
<th>パスワード</th>
<td><input type='text' name='pwd' value="<?= $_POST["pwd"] ?>"></td>
<td><?= $msg_pwd ?></td>
</tr>
<tr>
<th>メールアドレス</th>
<td><input type='text' name='mail' value="<?= $_POST["mail"] ?>"></td>
<td><?= $msg_mail?></td>
</tr>
<tr><td colspan="3" style="text-align:right;">
<?php
if($mode=="input"||$mode=="checked"){
echo "<input type='submit' name='check' value='check'>";
}
if($mode=="checked"){
echo "<input type='submit' name='regist' value='regist'>";
}
?>
</td>
</table>
</form>

<?php
if($mode=="regist"){
#### 暗号化
$mailcode = md5($_POST["usrid"]);
$pwd = md5($_POST["pwd"]);
#### データ登録
$value_list="\'".$_POST['usrid']
."\',\'".$pwd."\',\'".$_POST['mail']."\',\'".$mailcode."\'";
$query = "INSERT INTO member VALUES (" .$value_list. ")";
$query = htmlspecialchars($query) ;
$query = str_replace("\\","",$query);
$result = sqlite_query($db,$query);
sqlite_close($db);
#### 確認メール送信
mb_language("Japanese");
mb_internal_encoding ("SJIS");
$to = $_POST['mail'];
$subject = "登録の確認について";
$message ="
ご登録ありがとうございます。\n
下記のURLにブラウザでアクセスすると会員登録が完了します。\n
http://banayan.com/member/confirm_mail.php?mailcode=$mailcode\n
";//サンプルデータ
$header = "From: welcome@banayan.com";//サンプルデータ
$send_mail = mb_send_mail($to,$subject,$message,$header);
echo "データを仮登録し、「確認メール」を送信しました。
メールに記載されたURLにブラウザでアクセスして登録を完了させて下さい。";
}
?>
</body>
</html>


「確認メール」に記載されたURLにブラウザでアクセスすると、次のPHPファイルで本登録が完了します。

[ソース]会員登録システム(PHP+SQLite版)本登録ページ

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta http-equiv="Pragma" content="no-cache">
<title>メンバー登録データ・チェック</title>
</head>
<body>
<?php
if($_GET['mailcode'] ){
###########メンバーデータ読込み・比較
$db = sqlite_open('memberdb');
if(!($db)){
die("データベースをオープンできません。");
}else{
$query = "UPDATE member SET class = '2' WHERE class = '".$_POST['mailcode']."'";
$query = htmlspecialchars($query) ;
$query = str_replace("\\","",$query);
$result = sqlite_query($db,$query);
}
sqlite_close($db);
echo $usrid."様 登録が完了しました。";
}
?>
</body>
</html>


UPDATEコマンドのクエリを実行して、データを変更しています。classフィールドの値が「2」になると、一般会員として扱うと想定しています。

以上で、PHP+SQLiteによる会員登録システムは、できあがりです。ただし、セキュリティについては、ほとんど考慮していません。実際に使用する前に自分でセキュリティの勉強をされて、修正されることをお奨めします。

なお、ログインページと会員用ページの記述については、後日触れる予定です。それまで待てないという方は、以前記事にした「ログイン管理1」や「パスワードの暗号化(md5)」などを参考に、ご自分で考えてみて下さい。
PR
QRコード
忍者ブログ [PR]
Copyright (C) 2006 banayan ALL RIGHTS RESERVED.