こんにちは、アカウント アクティベーション ページを作成しようとしていますが、アカウントをアクティベートしようとすると、2 回に 1 回は機能します。したがって、基本的に私のアクティブ化リンクは、base64_encode() でエンコードされたユーザー ID と、crypt (sha512) でエンコードされたユーザー パスを使用します。登録ページのコードは次のようになります。
$qry = "SELECT * FROM users WHERE username='$username'";
$res = mysql_query($qry);
$row = mysql_fetch_row($res);
$userid=$row[0];//gets the id of the user
$userpass=$row[2];//gets the pass from database (which is already encoded)
$userid=base64_encode($userid); //encodes userid
$code=substr($userpass,6,strlen($userpass)-6); // cuts off some $6$xx$ information which is needed for crypt.
$message="//here is some message and then the link
http://www.xxx.be/forum/confirm.php?userid=".$userid."&code=".$code;
mail($email , "xxx registration confirmation" ,$message,"From:NoReply@xxx.be");
これはconfirm.phpで使用するコードです:
$userid=base64_decode($_GET['userid']);
$qry = "SELECT * FROM users WHERE id='$userid'";
$res = mysql_query($qry);
$row = mysql_fetch_row($res);
if ($userid%2==0) {
$pass=substr($row[2],0,strlen($row[2])-1);
} else {
$pass=$row[2];
}
if ($pass=="$6$10$".$_GET['code']) {
$qry = "UPDATE users SET activated=1
WHERE id=$userid";
$res = mysql_query($qry);
だからここに私の問題があります:(confirm.phpの5-9行目)なぜこれをしなければならなかったのかわかりません。アカウントを作成するたびに、ユーザーIDが奇数の場合にのみ機能しました。偶数だった場合は、パスワードにドットを追加しました。このようなもの:
userid:1 password:something
userid:2 password:stackoverflow.
そのため、$pass が "$6$10$".$_GET['code'] と一致せず、コード全体が失敗しました。ユーザーIDが0のときにドットが追加される理由がまったくわかりません.ps:confirm.phpの5〜9行目でその問題が解決しました。しかし、なぜそれをしたのか知りたいだけです。
編集: 回答する前に投稿全体をお読みください。