(我一直尋找和發現這裏的答案很多年了。這是我的第一篇文章,希望我做的是正確的......)PDO與BASE64_ENCODE工作部分
在我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>
當我比較的代碼($代碼)與存儲在表中的代碼,它是正確的(相同的),因爲它應該是。
的問題是,當我按照激活鏈接,我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>
";
}
}
繼驗證鏈接從電子郵件需要與$鍵
$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,具體是::
我verify.php,然後錯誤$id = $reg_user->lastID();
$key = base64_encode($id);
$id = $key;
的原因,我認爲這是$關鍵,是因爲電子郵件的驗證帳戶鏈接看起來是這樣的:
http://www.example.com/verify.php?id=MTUz&code=c74f01c3ea3edf807b21fc4ea28a41cb
現在,我清楚地知道的不多,我在被承認一個初學者,但MTUz位似乎是什麼問題。我能想到的唯一的事情就是MTU是超越某種東西的東西。
我承認我沒有嘗試過其他任何東西,因爲我不知道從哪裏開始。
請指點我正確的方向。
謝謝。
信貸的劇本原作者: codingcage(點)的COM/2015/09 /註冊登記的電子郵件驗證,忘記密碼,php.html
「MTUz」在base64表示中僅僅是「153」。任何你認爲似乎只是一個整數的原因? –
謝謝。代碼是我從帖子中的信用鏈接中得到的。問題不在於爲什麼使用base64,而是:base64代碼是否正確生成,如果是這樣,爲什麼它不能解碼,就像在我的帖子的verify.php代碼中一樣。有沒有比base64更好的選擇? – jamie
你確定它沒有正確解碼嗎?很多你的代碼只是假設什麼都不會失敗。基本的調試:'var_dump($ _ GET)',看看收到了什麼,'var_dump($ id)'看看解碼的內容等等... –