私は自分のウェブサイトのログインシステムを書きました。ユーザーが登録すると、システムは、ユーザーが提供した電子メール アドレスへのアクティベーション リンクを電子メールで送信します。リンクには、email と key の 2 つのパラメーターが含まれています。電子メール パラメータにはユーザーの電子メール アドレスが含まれ、キー パラメータには登録コードが含まれているため、登録を確認して保留中から確認済みに変更できます。有効化ページは、Email 列に設定された email パラメーターを持つ行から Status 列を取得することになっています。何らかの理由で、スクリプトはすべてのリンクが有効であると判断し、存在するかどうかにかかわらず、アカウントのステータスを更新しようとします。
これが私のコードです:
<?php
$email = $_GET['email'];
if($email == "") {
header("Location: http://www.zbrowntechnology.info/yard/register.php?message=Invalid Activation Link!");
exit;
}
$key = $_GET['key'];
if($key == "") {
header("Location: http://www.zbrowntechnology.info/yard/register.php?message=Invalid Activation Link!");
exit;
}
$con = mysql_connect("HOST", "USER", "PASS") or die(mysql_error());
mysql_select_db("zach_yardad", $con) or die(mysql_error());
$query1 = "SELECT `Status` FROM Accounts WHERE `Email`='".mysql_real_escape_string($email)."' AND `Status`='".mysql_real_escape_string($key)."'";
$result1 = mysql_query($query1) or die(mysql_error());
if(mysql_num_rows($result1) <= 0) {
header("Location: http://www.zbrowntechnology.info/yard/register.php?message=Invalid Activation Link!");
exit;
} else {
$query = "UPDATE Accounts SET `Status`='Confirmed' WHERE `Email`='$email'";
mysql_query($query) or die(mysql_error());
header("Location: http://www.zbrowntechnology.info/yard/login.php?message=Registration Complete!");
exit;
}
?>
有効なアクティベーション リンクは次のとおりです。
http://www.zbrowntechnology.info/yard/activate.php?email=zach@zbrowntechnology.com&key=2772190956485245
リンクをたどってそのアカウントをアクティブにしますが、リンクが有効でない場合は、アクティブ化後にログイン ページにリダイレクトされます。
編集:
クエリの結果は次のDESCRIBE `Accounts`
とおりです。
First Name varchar(65) NO NULL
Last Name varchar(65) NO NULL
Email varchar(100) NO NULL
Username varchar(65) NO NULL
Password varchar(65) NO NULL
Status varchar(65) NO NULL