(我总是在这里搜索并找到答案多年。这是我的第一篇文章,希望我做得对...)
在我的user_class.php中是注册的所有代码,验证忘记了pw,发送邮件等等。还有这个功能:
USER_CLASS.php
public function lastID()
{
$stmt = $this->conn->lastInsertId();
return $stmt;
}
在我的signup.php中,一切都按预期工作;该行正确插入数据库tbl_users,代码来自:
SIGNUP.php
$code = md5(uniqid(rand()));
此外,电子邮件使用激活链接正确发送,如下面的代码所示。
SIGNUP.php
else
{
if($reg_user->register($uname,$email,$upass,$code,$iagree,$userip))
{
$id = $reg_user->lastID();
$key = base64_encode($id);
$id = $key;
$message = "
Hello $uname,
<br /><br />
Welcome to XXXXX.<br/>
To complete your registration please , follow the link below:<br/>
<br /><br />
<a href='http://example.com/verify.php?id=$id&code=$code'>Click here to Activate your account.</a>
当我将代码($ code)与存储在表中的代码进行比较时,它应该是正确的(相同)。
问题是,当我按照激活链接时,我的verify.php页面无法在表格中找到该记录:
VERIFY.php
if(empty($_GET['id']) && empty($_GET['code']))
{
$user->redirect('index.php');
}
if(isset($_GET['id']) && isset($_GET['code']))
{
$id = base64_decode($_GET['id']);
$code = $_GET['code'];
$statusY = "Y";
$statusN = "N";
$stmt = $user->runQuery("SELECT userID,userStatus FROM tbl_users WHERE userID=:uID AND tokenCode=:code LIMIT 1");
$stmt->execute(array(":uID"=>$id,":code"=>$code));
$row=$stmt->fetch(PDO::FETCH_ASSOC);
if($stmt->rowCount() > 0)
{
if($row['userStatus']==$statusN)
{
$stmt = $user->runQuery("UPDATE tbl_users SET userStatus=:status WHERE userID=:uID");
$stmt->bindparam(":status",$statusY);
$stmt->bindparam(":uID",$id);
$stmt->execute();
$msg = "
<div class='alert alert-success'>
<button class='close' data-dismiss='alert'>×</button>
<strong>Thank you.</strong> Your Account is now activated : <a href='index.php'>Login here</a>
</div>
";
}
else
{
$msg = "
<div class='alert alert-error'>
<button class='close' data-dismiss='alert'>×</button>
Your Account is already Activated : <a href='index.php'>Login here</a>
</div>
";
}
}
else
{
$msg = "
<div class='alert alert-error'>
<button class='close' data-dismiss='alert'>×</button>
No Account Found : <a href='signup.php'>Signup here</a>
</div>
";
}
}
在电子邮件中的验证链接后,我转到verify.php,然后是错误:
$msg = "
<div class='alert alert-error'>
<button class='close' data-dismiss='alert'>×</button>
No Account Found : <a href='signup.php'>Signup here</a>
</div>
";
我认为问题在于signup.php,特别是使用$ key:
$id = $reg_user->lastID();
$key = base64_encode($id);
$id = $key;
我认为它是$ key的原因是因为该电子邮件的验证帐户链接如下所示:
http://www.example.com/verify.php?id=MTUz&code=c74f01c3ea3edf807b21fc4ea28a41cb
现在,我显然不太了解,我承认自己是初学者,但MTUz位似乎是个问题。我唯一能想到的就是MTU可以做的事超过某些东西。
我承认我还没有尝试过任何其他因素,因为我不知道从哪里开始。
请指出正确的方向。
谢谢。
CREDIT给剧本的原作者: codingcage(点)的COM / 2015/09 /登录登记的电子邮件验证-忘记密码-php.html
答案 0 :(得分:0)
我的主要失败。
@Marc B - 谢谢,var_dump($_GET)
是指出我的错误。
我为我的愚蠢错误占用你的时间而道歉。
除了user_class.php中的以下内容之外,任何代码都没有任何问题:
public function lastID()
{
$stmt = $this->conn->lastInsertId();
return $stmt;
}
具体为lastInsertId();
最后一个id当然是verify.php正在寻找的内容:
$id = base64_decode($_GET['id']);
这一切都正常工作。
问题(我的错误)是:
我有两个INSERT INTO语句;
FIRTS&gt; INSERT INTO tbl_user&lt;新注册用户。
第二个&gt; INSERT INTO tbl_another&lt;我需要的东西。
很明显`lastInsertId();&#39;从tbl_another获取身份证。
而lastInsertId就是这样,&gt;&gt;最后&lt;&lt;
我只是改变INSERT INTO的顺序,以便tbl_users&#39; ID是最后一次
现在一切正常。我觉得这样一个白痴 - 花上几天然后出于绝望 - 在这里寻求帮助。
无论如何,谢谢你的时间。 杰米。
PS:我如何将这篇文章标记为已解决? [编辑]找到它 - 点击复选标记接受答案,对吗?但明天才能这样做。