- ベストアンサー
会員登録したらメールが送られてきて仮登録、その後、本登録
会員登録したらメールが送られてきて仮登録状態となり、そのメールのURLにアクセスすると本登録となるシステムをphp+mysqlで作りたいです。何か手本となる情報はありませんでしょうか?
- みんなの回答 (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?username=$username®_key=$reg_key"; $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テーブルに、仮登録日時を記録して、本登録時に古すぎる仮登録を除外し、また、本登録が済んだら仮登録のデータを消して無効にする、等の処理があれば良いと思います。
その他の回答 (1)
- cybert
- ベストアンサー率56% (18/32)
めんどくさがりの私が作るなら、 1:仮登録でもDBにとりあえず入れちゃう。でも仮登録の状態がわかるように、touroku とかのカラム作って、仮登録の時入れたら0 2:メールの本文に登録解除するアプリに"ユーザID+現在時刻"を暗号化したパラメータ値を送るリンクを書く 3:アプリで復号して30分以内のアクセスならユーザIDからDBのtouroku を1にする みたいな