0

我在让用户帐户进行验证时遇到问题。我让它插入数据,然后发送一个确认链接,但是当它在电子邮件中单击时,它不会将“活动”行从 0 更新到 1。我整晚都在搞砸这个,这可能很简单,但是无论哪种方式,如果有人可以提供帮助,我将不胜感激。

此外,如果有人可以提供有关制作这种注射证明的任何提示,我也会非常高兴。谢谢!

<?php

require ('classes/class.db.php');
require ('classes/class.pass.php');


try {

if(isset($_GET['email']) && !empty($_GET['email']) AND isset($_GET['email_hash']) && !empty($_GET['email_hash'])){  
    // Verify data  
    $search = "SELECT email, email_hash, active FROM users WHERE email='".$email."' AND hash='".$email_hash."' AND active='0'";
    $match = $db->num_rows( $query );

    if($match > 0){  

    $stmt = $db->prepare('UPDATE users (active) VALUES (:active) WHERE active = 0');
    $status = $stmt->execute(array(
    ':active' => 1));

        if( $status )
        {
            echo '<p>Your account has been activated, you can now login</p>';
        }
    }

}else{  
    echo '<p>Your account is already activated</p>';
}  


} catch (PDOException $e) {
        die($e->getMessage());
    }

?>

更新#1

尝试了 Akam 的建议,但仍然遇到一些错误。这是我的陈述。

$stmt = $db->prepare("UPDATE users SET active ='1' where active = '0' and email=:email AND email_hash=:email_hash");
$status = $stmt->execute(array(
':email' => $_GET['email'],
':email_hash' => $_GET['email_hash']
));

更新#2

似乎问题在于$_GET['email_hash']不能回显或存储在变量中。它不会从 signup.php 页面获取随机哈希字符串并将其传递到 verify.php 页面,但电子邮件地址可以很好地传递。我有点困惑,希望有人为我澄清这一点。谢谢。

更新#3

问题就像转向一样$_GET['email_hash']简单$_GET['hash']。再次感谢!

4

2 回答 2

0

您的UPDATE查询包含语法错误。尝试将查询更改为

$stmt = $db->prepare('UPDATE users SET active=:active WHERE active=0 AND email=:email AND email_hash=:email_hash');

然后在语句执行期间将$emailand包含$email_hash在您的关联数组中。

顺便说一句, callisset($var) && !empty($var)大致相当于write !empty($var)。根据文档,因为

empty($var)

是一致的

!isset($var) || $var == false,

由此得出与!empty($var)一致isset($var) && $var != false

于 2013-07-29T06:39:04.917 回答
0

您也可以通过一个查询完成所有操作,如果您在更新中写入相同的条件,则无需先查询:

"UPDATE users SET active ='1' where active = '0' and email=:email AND hash=:email"
于 2013-07-29T06:27:39.967 回答