我想创建一个脚本,用户可以在注册电子邮件后使用它来生成 pin。PIN 码必须是 6 位数长且唯一;没有两个用户可以拥有相同的 pin。
我有以下代码,但是除了陷入无限循环之外,我无法继续前进。随着更多引脚的使用,循环 while() 函数的概率会增加。有没有人对此有更优雅的解决方案的想法?
用户使用他们的 pin 从网站访问免费服务。如果用户猜到另一个密码,服务不会失败,但会破坏用户体验。
如果可能的话,我想以这样一种方式分配 PIN,以便在统计上猜到 pin 的概率可以忽略不计。
<?php
if($_POST['srSubmit'] && $_POST['srEmail'] && $_POST['srPass']) {
$conn = mysqli_connect('localhost','root','','db_test');
while(1) {
$pin = rand(111111,999999);
$sel = mysqli_query($conn,"SELECT * FROM formusers WHERE pin = '$pin'");
if(mysqli_num_rows($sel) != 0) { continue; }
mysqli_query($conn,"INSERT INTO formusers(email,password,pin) VALUES('".$_POST['srEmail']."','".$_POST['srPass']."','".$pin."')");
if(mysqli_affected_rows($conn)!=-1) {
echo "Pin:" . $pin;
exit;
} else {
echo "Existing email, try again<br />";
}
break;
}
}
?>
<form method="POST" action="">
<input type="email" name="srEmail" value="" placeholder="Email" /><br />
<input type="password" name="srPass" value="" placeholder="Password" /><br />
<input type="submit" name="srSubmit" value="Register" />
</form>