你好,我正在嘗試創建一個帳戶激活頁面,但是當我嘗試激活一個帳戶時,它的工作原理是兩次。所以基本上我的激活鏈接使用用base64_encode()編碼的用戶id和用crypt編碼的用戶pass(sha512)。所以我的註冊頁面上的代碼如下所示:如果PHP奇怪的錯誤?
$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:[email protected]");
這是我在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 )我不明白爲什麼我必須這樣做。 每次我創建一個帳戶,它只有在用戶名奇怪時纔有效。如果它甚至爲密碼添加了一個點。 所以這樣的事情:
userid:1 password:something
userid:2 password:stackoverflow。
所以這就是爲什麼$ pass沒有加上「$ 6 $ 10 $」。$ _ GET ['code']並且整個代碼都失敗了。我特別不知道爲什麼當我的用戶ID是0時添加點。 ps:confirm.php中的第5-9行解決了這個問題。但我只想知道它爲什麼這樣做。
編輯:請在回答之前閱讀全文。
您的代碼易受SQL注入攻擊。請不要使用舊的'mysql_ *'函數,並切換到MySQLi或PDO中的參數化查詢。 – Polynomial
_「所以這裏出現我的問題:[...]每當我創建一個帳戶時,它只在用戶名奇怪時才起作用,如果它甚至爲密碼添加了一個點。」_然後顯示存儲用戶的代碼。 – CodeCaster
那麼,if($ userid%2 == 0)'的意圖是什麼?我並沒有完全明白你在那裏做什麼,但它可能是你的奇數/偶數用戶ID問題的根源。 – halfer