0

感谢Nickfrosty提供的关于能够在 php 中创建适当的注册系统的 youtube 教程,我已经能够将他的代码从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页面。

我的问题是:用户点击激活链接后,如何激活用户的账户?我需要它能够通过在上面的 php 中查找它来识别用户的用户名和激活码$message .= "$site/activate.php?user=$getuser&code=$code\n";,然后在数据库中我需要它Active0 to1` 更新该用户的列,以便用户现在处于活动状态。下面的说法是否正确:

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

activate.php页面仅显示一条消息,说明该帐户已激活。如果用户已经被激活,那么我希望它显示用户已经被激活的消息。

4

3 回答 3

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. 如果两个代码相同,您可以按照您的建议更新您的表格

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

于 2012-08-24T23:35:15.943 回答
0

注册时:

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

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

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。我知道那里有很多代码错误,需要更正和修改,但是我是一名新开发人员,这应该给你提示,谢谢。

于 2012-08-25T01:07:42.553 回答
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';
}
于 2012-08-25T07:54:11.900 回答