アプリ版:「スタンプのみでお礼する」機能のリリースについて

会員登録したらメールが送られてきて仮登録状態となり、そのメールのURLにアクセスすると本登録となるシステムをphp+mysqlで作りたいです。何か手本となる情報はありませんでしょうか?

A 回答 (2件)

こんな感じになると思います。


但し、以下の例はわかりやすさを優先するため、エラー処理やサニタイズ処理などを全く行っていませんので注意してください。
また、実際に動かしてみていないコードなので、エラーがあるかもしれません(笑) 適当に修正しながら使ってください。


以下の仮登録用テーブルを作成しておく。

| CREATE TABLE interim_registration (
|  username varchar(32) NOT NULL,
|  password varchar(32) NOT NULL,
|  mailadr varchar(64) NOT NULL,
|  reg_key varchar(64) NOT NULL
| );

----

<html><!-- register.html -->
<body>

<form action="http://www.example.com/path/to/register.php" method="post">
希望ID:<input type="text" name="username"><br>
パスワード:<input type="password" name="password"><br>
メアド:<input type="text" name="mailadr"><br>
<input type="subimit" value="仮登録">
</form>

</body>
</html>

----

<?php // http://www.example.com/path/to/register.php

mysql_connect($host, $user, $password);
mysql_select_db($database);

$reg_username = $_POST['username'];
$reg_password = $_POST['password'];
$reg_mailadr = $_POST['mailadr'];
$reg_key = sha1(uniqid(rand(),1)); // ランダム文字列の生成

$sql = 'INSERT INTO interim_registration '.
    '(username, password, mailadr, reg_key) '.
    "VALUES ('$reg_username', '$reg_password', '$reg_mailadr', '$reg_key');";
mysql_query($sql);

$to = $reg_mailadr;
$subject = 'e-mail confirm';
$message = "http://www.example.com/path/to/confirm.php?usern …
$headers = 'From: webmaster@example.com';

mail($to, $subject, $message, $headers);

echo "$mailadr宛に確認メールを送信しました。";

?>

----

<?php // http://www.example.com/path/to/confirm.php

mysql_connect($host, $user, $password);
mysql_select_db($database);

$username = $_GET['username'];
$reg_key = $_GET['reg_key'];

$sql = 'SELECT * FROM interim_registration '.
    "WHERE username = '$username' AND reg_key = '$reg_key';";
$sql_result = mysql_query($sql);

if(($userdata = mysql_fetch_assoc($sql_result) == NULL)
{
 echo "キーが一致しません。";
}
else
{
 // $userdata['username'], $userdata['password'], $userdata['mailadr'] を使って、正規ユーザー登録処理を行う
}

----

あと、interim_registrationテーブルに、仮登録日時を記録して、本登録時に古すぎる仮登録を除外し、また、本登録が済んだら仮登録のデータを消して無効にする、等の処理があれば良いと思います。
    • good
    • 1

めんどくさがりの私が作るなら、



1:仮登録でもDBにとりあえず入れちゃう。でも仮登録の状態がわかるように、touroku とかのカラム作って、仮登録の時入れたら0
2:メールの本文に登録解除するアプリに"ユーザID+現在時刻"を暗号化したパラメータ値を送るリンクを書く
3:アプリで復号して30分以内のアクセスならユーザIDからDBのtouroku を1にする
みたいな
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!