用户点击激活链接后如何激活帐户?

时间:2012-08-24 23:04:51

标签: php mysqli

感谢youtube tutorial from Nickfrosty能够在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 <.......@hud.ac.uk>";
$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中查找用户的用户名和激活码,然后在数据库中我需要它来从{{更新该用户的Active列1}} 1`,以便用户现在处于活动状态。以下陈述是否正确:

0 to

"UPDATE Teacher SET Active='1' WHERE TeacherUsername = '$getuser'" "SELECT * FROM Teacher WHERE TeacherUsername='$getuser' AND Active='1'" 页面只显示一条消息,说明帐户已激活。如果用户已被激活,那么我希望它显示消息,说明用户已被激活。

3 个答案:

答案 0 :(得分:0)

我建议您不要使用TeacherUserName来选择您的老师。

你的表应该包含一个列TEACHER_ID(int,auto_increment):想象两个教师是否有相同的名字?

假设教师名称不同,您可以使用hash_hmac函数创建安全代码:

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

你可以:

  1. 发送电子邮件时生成此代码(name ='Tom',code ='ARI3428UZE')

  2. 当用户点击链接时,你只需要获取用户名(name ='Tom'),再次使用hash_mac创建代码(newcode ='ARI3428UZE')

  3. 您测试代码== newcode

  4. 如果两个代码相同,您可以按照建议更新表格

  5. 最好的方法是使用TEACHER_ID而不是TEACHERNAME。

答案 1 :(得分:0)

注册时:

创建一个变量$ random = rand(1,9); &lt; - 获取随机数。 在使用其他值(如教师姓氏,教师姓氏)注册时,将其插入表格中。

发送电子邮件至他的电子邮件地址。将代码附在他的电子邮件链接中。

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

将其放入activate.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.我知道那里有许多代码错误,需要更正并且修改,但我是一个新的开发人员,这应该给你提示,谢谢。

答案 2 :(得分: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';
}