感谢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'"
页面只显示一条消息,说明帐户已激活。如果用户已被激活,那么我希望它显示消息,说明用户已被激活。
答案 0 :(得分:0)
我建议您不要使用TeacherUserName来选择您的老师。
你的表应该包含一个列TEACHER_ID(int,auto_increment):想象两个教师是否有相同的名字?
假设教师名称不同,您可以使用hash_hmac函数创建安全代码:
$code = hash_hmac('sha1', 'username', 'YOUR_SECRET_KEY');
你可以:
发送电子邮件时生成此代码(name ='Tom',code ='ARI3428UZE')
当用户点击链接时,你只需要获取用户名(name ='Tom'),再次使用hash_mac创建代码(newcode ='ARI3428UZE')
您测试代码== newcode
如果两个代码相同,您可以按照建议更新表格
最好的方法是使用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';
}