저는 PHP를 배우고 while을 사용하고 표현을 올바르게 계속하려고합니다.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 인 경우 임의 번호로 지정하지 마십시오. 당신은 당신이 예상했던 것보다 빨리 충돌로 끝날 것입니다 ('생일 패러독스'를보세요). ID에 증가하는 INT를 사용하십시오. 암호 재설정이라면 추측하기가 너무 쉽습니다. –
그의 논리는 나에게 잘 보인다. 예, 그는 조건없이 깨고 있지만, 그는 상태로 계속됩니다. 그렇습니다, 조금 뒤얽힌 것입니다, 그러나 이것이 조금 더 명확하게 할 수있을지라도 논리는 정확 해 보입니다. – mti2935
이 질문에 대한 해결책은 임의의 고유 값에 대한 훌륭한 설명입니다. [Solution Here] (http://stackoverflow.com/questions/7579570/loop-until-passcode-is-unique) – Peter