2012-08-24 193 views
0

感謝來自nickfrosty的YouTube教程,能夠在php中創建適當的註冊系統,我已經能夠將他的代碼從mysql轉換爲mysqli,並且能夠在用戶註冊後通過電子郵件發送激活鏈接。如何在用戶點擊激活鏈接後激活帳戶?

下面是代碼,它在數據庫中插入註冊詳細信息,並在用戶註冊後向用戶的電子郵件發送消息和激活鏈接。

$code = md5(rand()); 

$insertsql = " 
INSERT INTO Teacher 
(TeacherForename, TeacherSurname, TeacherEmail, TeacherAlias, TeacherUsername, TeacherPassword, Code) 
VALUES 
(?, ?, ?, ?, ?, ?, ?) 
"; 
if (!$insert = $mysqli->prepare($insertsql)) { 
// Handle errors with prepare operation here 
}           

$insert->bind_param("sssssss", $getfirstname, $getsurname, 
$getemail, $getid, $getuser, 
$teacherpassword, $code); 

$insert->execute(); 

if ($insert->errno) { 
// Handle query error here 
} 

$insert->close(); 

$site = "http://helios.hud.ac.uk/......../Mobile_app"; 
$webmaster = "Mayur Patel <[email protected]>"; 
$headers = "From: $webmaster"; 
$subject = "Activate Your Account"; 
$message = "Thanks for Registering. Click the link below to Acivate your Account. \n"; 
$message .= "$site/activate.php?user=$getuser&code=$code\n"; 
$message .= "You must Activate your Account to Login"; 

if(mail($getemail, $subject, $message, $headers)){ 
$errormsg = "You have been Registered. You must Activate your Account from the Activation Link sent to <b>$getemail</b>"; 
$getfirstname = ""; 
$getsurname = ""; 
$getid = ""; 
$getuser = ""; 
$getemail = ""; 
} 

但是我現在有一個問題。如果我點擊鏈接,它會將用戶導航到activate.php頁面。

我的問題是,用戶點擊激活鏈接後,它是如何激活用戶的帳戶?我需要它能夠通過在$message .= "$site/activate.php?user=$getuser&code=$code\n";以上的php中查找這個來識別用戶的用戶名和激活碼,然後在數據庫中,我需要它將該用戶的「激活」列從「0」更新爲「1」該用戶現在處於活動狀態。是下面的語句正確:

"UPDATE Teacher SET Active='1' WHERE TeacherUsername = '$getuser'" 
"SELECT * FROM Teacher WHERE TeacherUsername='$getuser' AND Active='1'" 

的activate.php頁面簡潔狀態的消息,說明該帳戶被激活。如果用戶已被激活,那麼我希望它顯示消息,指出用戶已被激活。

回答

0

我這是怎麼會編寫的activate.php:

代碼:

$sUser = $_GET['username']; 
$sCode = $_GET['code']; 

//MYPRIVATEKEY defined on a conf.php or else 
$sEncodedUser = hash_hmac('sha1', $sUser, 'MYPRIVATEKEY'); 

if($sEncodedUser == $sUser) { 
    $sQuery = "UPDATE USER SET activated=1 WHERE USERNAME = " . escape($sUser); 
    //RUN $sQuery; 
    echo 'Account activated !'; 
} else { 
    echo 'Problem when activating your account'; 
} 
0

我建議你不要使用TeacherUserName來選擇你的老師。

你的表應該包含一列TEACHER_ID(int,auto_increment):想象兩個教師是否有相同的名字?

假設老師有不同的名稱,你可以創建一個hash_hmac功能的安全代碼:

$code = hash_hmac('sha1', 'username', 'YOUR_SECRET_KEY'); 

您可以:

  1. 產生,當你發送電子郵件的代碼(名稱=」 Tom',code ='ARI3428UZE')

  2. 當用戶點擊鏈接時,您只需要獲取用戶名(name ='Tom'),再次創建代碼(newcode = 'ARI3428UZE')與hash_mac

  3. 你測試代碼== newcode

  4. 如果這兩個碼相同,您可以更新表,你提出

最好的辦法是使用TEACHER_ID而不是TEACHERNAME。

+0

我有teacherId這是自動遞增,但我會用TeacherUsername因爲沒有老師可以有相同的用戶名。我會試試看看會發生什麼。乾杯 – user1394925

+0

如果你不介意fabrice,爲了使它更容易,你能告訴我你將如何編寫activate.php頁面,以便我可以看到需要做什麼?我不急,但如果我能看到你將如何編寫代碼,那真的會給我一個開始,然後我可以使用和操縱代碼,以使其能夠在我的應用程序中工作。 – user1394925

0

當註冊:

創建一個變量$隨機=蘭特(1,9); < - 獲得一個隨機數。 在註冊其他值如老師姓氏,老師姓名時將其插入表中。

發送電子郵件到他的郵箱地址。在他的電子郵件鏈接中附上代碼。

www.yourdomain.com/activate.php?username=teachername&code=randomcodehere 

將其置於激活狀態。PHP

$user_to_be_activated  = $_GET['username']; 
$code_to_be_matched  = $_GET['codehere']; 

$query  = mysql_query("SELECT * FROM Teacher WHERE teachername='$user_to_be_activated' AND activecode='$code_to_be_matched'"); 
$counting = mysql_num_rows($query); 

if($counting == '1') 
{ 
    mysql_query("UPDATE Teacher SET accountactive='1'"); <-- Set this to 0 when registering 
} 
else 
{ 
    echo"The code and Username doesn't match!"; 
} 

所以當他點擊了確認電子郵件,您的網站將檢查用戶名和數據庫的代碼,如果他們是正確的,那麼設置激活到1.I知道有配發的代碼中的錯誤在那裏,需要糾正和修改,但我是一個新的開發人員,這應該給你提示,做到這一點,謝謝。