我在让用户帐户验证时遇到问题。我得到它插入数据,然后发出一个确认链接但是当它被点击在电子邮件中它不会更新从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']
一样简单。再次感谢!
答案 0 :(得分:0)
您也可以通过一个查询执行所有操作,如果您在更新中编写相同的条件,则无需先进行查询:
"UPDATE users SET active ='1' where active = '0' and email=:email AND hash=:email"
答案 1 :(得分:0)
您的UPDATE
查询包含syntax error。尝试将查询更改为
$stmt = $db->prepare('UPDATE users SET active=:active WHERE active=0 AND email=:email AND email_hash=:email_hash');
然后在语句执行期间在关联数组中包含$email
和$email_hash
。
作为旁注,请isset($var) && !empty($var)
roughly equivalent来撰写!empty($var)
。根据文档,因为
empty($var)
与
一致!isset($var) || $var == false,
以下!empty($var)
与isset($var) && $var != false
一致。