我有一个注册和登录系统,可以正常工作……直到一定程度。用户注册后,将发送一封包含激活码的电子邮件。预期的行为是,单击电子邮件激活链接后,数据库中已注册但未经验证的“状态”列将从默认整数值0重置为1。但是,仅在发送电子邮件时更新“状态”,而不会用户必须单击激活链接!
我已经搜索了Stack Overflow网站,查看了教程,并尝试对代码进行许多排列,但没有成功。
if (isset($_GET['email']) AND isset ($_GET['vkey'])){
if ($stmt = $link->prepare('SELECT email, vkey FROM members WHERE email = ? AND vkey = ?')) {
$stmt->bind_param('ss', $_GET['email'], $_GET['vkey']);
$stmt->execute();
// Store the result so we can check if the account exists in the database.
$stmt->store_result();
if ($stmt->num_rows ==1) {
if ($stmt = $link->prepare('UPDATE members SET status = 1 WHERE email = ? AND vkey = ?')) {
// Set status to 1
//$status = 1;
$stmt->bind_param('ss', $_GET['email'], $_GET['vkey']);
$stmt->execute();
echo 'Your account is now activated. You can now login.<br><a href="login.php">Login</a>';
}
} else {
echo 'Your account is already activated or doesn\'t exist!';
}
}
我希望仅当用户单击电子邮件中的验证链接时,数据库“状态”列才会更新,但它会立即更新电子邮件的发送。
答案 0 :(得分:0)
请确保您发送电子邮件的API未单击电子邮件中的链接。一些电子邮件提供商会这样做。
您可以通过记录请求并单击链接之前检查请求是否被调用来进行检查。