电子邮件激活脚本的问题

时间:2011-02-02 16:45:34

标签: php sql

任何人都希望了解为什么此电子邮件激活不起作用?基本上,我发送两个url查询变量,将激活密钥和电子邮件存储为stings。我将它们作为list()提取并将它们用作数据库查询。测试时所有的db对象都运行正常,但是当我从电子邮件中运行脚本时,它会打印出echoed语句:“该帐户现在处于活动状态......”但是当我检查数据库时,它没有更新这些东西我把它告诉了ie activationkey,status和userid。

这是一个奇怪的部分:当我在数据库中只有一个用户时,代码会按预期执行。但是一旦我尝试添加另一个用户,它就不会按照指示更新新记录。所以我的问题是:为什么这个代码仅在数据库中有一个用户时才有效,而当有多个用户时则不行?它没有任何意义。非常感谢这里的帮助。

include $_SERVER['DOCUMENT_ROOT']. '/video_dating/includes/Database.php';
list($queryString,$email) = explode('&', $_SERVER['QUERY_STRING']);

print_r($email);
$dbname = new Database();
$dbname->Query('select activationkey, id, email from users');
$userinfo = $dbname->Getdata();
foreach ($userinfo as $users)
{

    if ($queryString == $users['activationkey'])
    {
    $dbname->Query("update users set activationkey='', status='activated', userid='1' where email='$email'");
    echo "Thank you for registering. Your account is now active. Please login any time.";

   }
   else 
      echo "Sorry, your account was not activated.";
}

2 个答案:

答案 0 :(得分:2)

我不知道你的数据库的结构,但我认为userid是一个自动增量键。我猜测问题是userid='1'代码的这一部分,你总是认为用户的id是1。

您还可以通过直接查询激活密钥来简化代码。

即。

$dbname->Query('select activationkey, id, email from users WHERE activationkey="'.$queryString.'" and email = "'.$email.'"');

此外,您应该确保撤消queryString和电子邮件以防止数据库注入攻击。您可以使用mysql_real_escape_string或基于您的数据库类的替代方案。

答案 1 :(得分:0)

可以将字段userid定义为键吗?如果是,它应该是唯一的,但您始终将其设置为1

尝试从UPDATE中删除该部分:

, userid='1'