0

php で適切な登録システムを作成できるというNickfrosty の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";必要があり、データベースActiveでそのユーザーの列を0 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) 列が含まれている必要があります: 2 人の教師が同じ名前を持っていると想像してみてください。

教師の名前が異なる場合、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. 2 つのコードが同じ場合は、提案どおりにテーブルを更新できます

最良の方法は、TEACHERNAME の代わりに TEACHER_ID を使用することです。

于 2012-08-24T23:35:15.943 に答える
0

登録時:

変数を作成します $random = rand(1,9); <-- 乱数を取得します。Teacher Alies、Teacher Surname などの他の値で登録するときに、これをテーブルに挿入します。

彼のメール アドレスにメールを送信します。彼の電子メールリンクにコードが添付されています。

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 に答える