【问题标题】:How to implement an activate.php script?如何实现一个activate.php 脚本?
【发布时间】:2011-11-05 17:29:37
【问题描述】:

我正在尝试创建一个脚本,该脚本通过在注册电子邮件中发送给他们的变量来验证(激活)用户帐户。

网址看起来像

activate.php?confirm=h47H35gGdh7G6dh3j

我会$_GET["confirm"] 并对照数据库进行检查,但我不知道如何捕获我可能遇到的所有错误,例如:

  • 用户已激活
  • 激活码错误
  • 根本没有激活码等

我该怎么做?

【问题讨论】:

  • 将 user_id 添加到您的网址。
  • @xdazz 我不同意。将 user_id 添加到您的数据库。您不想信任任何客户端信息。
  • @mjec user_id 在数据库中,您需要 user_id 才能知道要激活哪个用户。
  • @xdazz 这就是我的意思。您的激活令牌必须存储在数据库中 - 我建议使用它应用的 user_id、发布时间、到期时间以及是否已使用的标志。

标签: php mysql get activation user-registration


【解决方案1】:

检测无激活码:

if (!isset($_GET['confirm']) || empty($_GET['confirm'])) {
    die('Error: an activation code is required.');
}

要检测用户是否已激活,请在数据库中查找要激活的用户 ID ($uid),然后检查数据库以查看用户是否已激活。如果您想避免额外的查找并且您不介意运行额外的更新(并且您没有更新激活时间之类的内容),您可以运行更新,然后检查有多少行受到影响($stmt->rowCount() 在 PDO )。如果该值为零但没有数据库错误,则只是用户已被激活,您可以抛出错误。

如果您在查找确认码时从数据库返回一个空集(零行),则激活码错误。

【讨论】:

  • 谢谢,我用它来检查激活码是否存在,但它不检查它是否存在于数据库中。实际上,我现在已经通过从数据库中提取代码并将其与 $_GET 数组中的值进行比较来解决这个问题。还是谢谢你。
【解决方案2】:

我已经设法自己回答了。

基本上我从 $_GET 数组中提取值并使用该值来查看它是否存在于数据库中,如果存在,那么我使用另一个 if 语句来查看该用户的状态是否已设置为“活动”,如果是这样,它不会做任何事情,但如果帐户未激活,那么它将设置为激活并确认这一点。

【讨论】:

    猜你喜欢
    • 2011-03-09
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 2017-03-01
    • 1970-01-01
    • 2018-01-30
    • 1970-01-01
    相关资源
    最近更新 更多