アクティベーションページを作成しようとしています。ユーザーがアクティベーションリンクをクリックすると、ユーザーはactivate.phpページに移動し、アカウントがアクティベートされているかどうかを示すメッセージが表示されます。
私が抱えている問題は、「コードとユーザー名が一致しません!アカウントがアクティブ化されていません」というメッセージが表示され続けることです。アクティベーションリンクがクリックされても、成功したメッセージ「アカウントはアクティベートされました」はまったく表示されません。
また、正しいユーザー名とコードが識別された場合、データベースの「アクティブ」列は「1」に変更されますが、それでも「0」が表示され続けます。これは、アカウントがまだ非アクティブであることを意味します。
私の質問は、ユーザー名とアクティベーションコードが正しいことを認識しないのはなぜですか?
以下は、registration.phpスクリプトで、ユーザーの登録の詳細を挿入し、アクティベーションリンクを電子メールで送信します。
$teacherpassword = md5(md5("j3j".$teacherpassword."D2n"));
$code = md5(rand(1,9));
$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();
$getuser = $_POST['user'];
$code = md5(rand(1,9));
$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 = "";
}
以下は、アクティベーションリンクをチェックしてmysqli操作を実行し、メッセージを表示するactivate.phpページです。
<?php
$user_to_be_activated = $_GET['user'];
$code_to_be_matched = $_GET['code'];
// don't use $mysqli->prepare here
$query = "SELECT TeacherUsername, Active, Code FROM Teacher WHERE TeacherUsername = ? AND Code = ? ";
// prepare query
$stmt=$mysqli->prepare($query);
// You only need to call bind_param once
$stmt->bind_param("ss",$user_to_be_activated, $code_to_be_matched);
// execute query
$stmt->execute();
// get result and assign variables (prefix with db)
$stmt->bind_result($dbTeacherUsername, $dbActive, $dbCode);
//get number of rows
$stmt->store_result();
$counting = $stmt->num_rows();
if($counting == '1')
{
$updatesql = "UPDATE Teacher SET Active = ? WHERE TeacherUsername = ? AND Code = ?";
$update = $mysqli->prepare($updatesql);
$update->bind_param("iss", 1, $user_to_be_activated, $code_to_be_matched);
$update->execute();
$update->close();
echo "Account is Activated";
}
else
{
echo "The Code and Username doesn't match! Account is not Activated.";
}
?>
リンクが初めてクリックされたときにアカウントをアクティブ化できるようにしたいだけです。