php - 电子邮件激活链接未按预期工作
问题描述
我有一个可以正常工作的注册和登录系统……在某种程度上。用户注册后,将发送一封包含激活码的电子邮件。预期的行为是,单击电子邮件激活链接时,我的数据库中已注册但未经验证的“状态”列将从默认整数值 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!';
}
}
我希望仅当用户单击电子邮件中的验证链接时才会更新数据库“状态”列,但它会立即更新电子邮件发送。
解决方案
确保您发送电子邮件的 API 没有单击电子邮件内的链接。一些电子邮件提供商会这样做。
您可以通过记录请求并在单击链接之前检查它是否被调用来进行检查。
推荐阅读
- java - 获取设备的当前语言
- python - 将列名与给定列的值连接起来
- androidx - org.greenrobot.greendao.DaoException 在使用 androidx 时 android 发布模式
- wordpress - 如何在文章的特色图片、图片和画廊上插入和显示版权所有者字段?
- python-3.x - 如何在pyqt5中将函数输出设置为信号
- java - 如何将我的字符串(表示十六进制值)转换为字节?
- mysql - 在 Sequelize 的 findAll() 查询中同时使用包含和属性的问题
- windows - 如何像在 Linux 中一样在 git bash 中按向上/向下翻页启用历史搜索?
- javascript - Chrome.storage.onchnage 不起作用 Chrome 扩展
- android - Flutter 未更新其动画文本小部件 (Animated_Text_kit)