多次停止用户使用电子邮件验证链接.PDO准备的语句不起作用


Stop user using email verification link more than once. PDO prepared statement not functioning

编辑:根据我在下面得到的第一个回复,我重新设计了我的代码,它现在可以工作了......首先检查给定的电子邮件地址以找到玩家 ID。然后根据玩家 ID 检查验证状态。因此,如果他们将来更改了电子邮件地址,它仍然会知道它是否已经过验证。

下面是我的最终代码,(我已经更改了一些项目的名称,所以它不是我自己代码的精确复制/粘贴)。

function email_not_verified ($email) { //check it's not already verified
include ('../connect.php'); // Include connect to database functions
$findUser= $db->prepare("SELECT game_id FROM players WHERE email=?");
$findUser->execute(array($email));
$user = $findUser->fetch();
if ( $findUser){
$veri= $db->prepare("SELECT sent_verification FROM players WHERE game_id=?");
$veri->execute(array($user["game_id"]));
$results = $veri->fetch();
$final = $results["sent_verification"];
}
if ($final == 1){
return TRUE;
}
else{
    return FALSE;
}   
}

再次感谢您的帮助。

下面,是我最初的问题。

我正在尝试找出一个简单的设置,可以阻止用户重复验证他们的电子邮件地址。当他们验证他们的电子邮件时,我会奖励他们 300 积分的奖金,用于购买店内游戏。我显然不想每次他们都按照电子邮件发送的验证链接时继续发布。

因此,在运行正常的验证脚本之前,我尝试先运行检查。

但是令人惊讶的是,令人惊讶的是:它不起作用...

我试图在我的数据库中搜索验证字段设置为"1"的电子邮件地址,然后我会看看它找到了多少次这个结果。如果它发现它"0"次,那么可以验证,如果它找到它一次,那么它之前已经被验证过。

function email_not_verified ($email) {
include ('../connect.php'); // connect to database 
//check it's not already verified
$checkEmail= $db->prepare("SELECT * FROM players WHERE sent_verification=?, email=?");
$checkEmail->execute(array('1', $email));   
$check2 = $checkEmail->rowCount();
if ($check2 = 1){
return TRUE;
}
else{
    return FALSE;
}
}

我一直在使用

 file_put_contents('results.txt',$check2); 

以查看代码的结果,无论它发出 TRUE 还是 FALSE。但是结果返回为"0",即使我从查看数据库可以看出它应该是"1"。

我不确定是否有一种更简单的方法来解决这个问题,我一直在尝试了解绑定值,但它还没有陷入......我会继续努力。

感谢您的任何帮助,指导,指出显而易见的...我觉得我的脚本走错了路,但想不出该怎么处理它......

干杯

乔恩

你的if陈述是错误的。 您使用的是赋值运算符,而不是比较运算符。 不过这并不重要,因为rowCount并不总是可靠的,这可能是实际问题所在。 您需要做的是获取第一行,看看是否返回了一行。

但是,您可能不希望将其附加到电子邮件验证。 当用户更改其电子邮件地址时,您将需要验证该新地址,并且您可能不希望每次更改时都给他们 300 个积分。 否则,有人可能会以编程方式一遍又一遍地更改他们的电子邮件地址,为自己创造大量积分。

我会将 300 个免费积分作为优惠券或每个帐户只能使用一次的东西分开。 在电子邮件验证中,如果该帐户的优惠券尚未用完,请使用它并在数据库中将其标记为该优惠券。 这可以简单地通过为new_account_bonus_credits或其他东西添加另一列来完成。