我正在學習PHP並試圖正確使用while和continue表達式。使用while()並在PHP中繼續
我有一個腳本可以創建一個6位數的PIN碼,我想確保它是唯一的,否則我想生成另一個PIN碼。
while(1) {
$pin = rand(111111,999999);
$sel = mysql_query("SELECT * FROM formusers WHERE pin = '$pin'");
if(mysql_num_rows($sel) != 0) { continue; }
mysql_query("INSERT INTO formusers(email,password,pin) VALUES('".$_POST['srEmail']."','".$_POST['srPass']."','".$pin."')");
if(mysql_affected_rows()!=-1) {
echo "Pin:" . $pin;
exit;
} else {
echo "Existing email, try again<br />";
}
break;
}
我的語法是否正確?它似乎工作,但我沒有辦法在rand()函數創建兩次相同的PIN的情況下進行調試。
此外,如果我沒有用完獨特的PIN碼,這裏會發生什麼?想必它會無限循環?有什麼辦法可以防止這種情況發生?
這是密碼重置電子郵件的密碼?或者用戶的唯一ID?如果它是一個唯一的ID,那麼不要把它作爲一個隨機數字。你會以比預期更快的速度碰撞FAR(查看'生日悖論')。對ids使用增量INT。如果它是一個密碼重置,那麼它很容易猜到。 –
他的邏輯看起來很適合我。是的,他在沒有條件的情況下突破,但他仍然處於一種狀態。是的,這有點複雜,但邏輯看起來是正確的,雖然這可以做得更清楚一點。 – mti2935
此問題的解決方案對隨機唯一值有很好的解釋。 [解決方案](http://stackoverflow.com/questions/7579570/loop-until-passcode-is-unique) – Peter