在if-else中重新生成随机数(php)

时间:2018-06-11 08:51:55

标签: php mysql

我的PHP代码在注册用户时生成随机银行帐号。 当$wszystko_ok == true时,让他注册。

此代码检查生成的数字是否已存在于数据库中。如果存在,请设置$wszystko_ok = false并且它不同意帐户注册。

在这种情况下如何让它再次生成一个随机数?

$wszystko_ok == true
$r_nrkonta = rand(1000000000, 9999999999);

$rezultat2 = $polaczenie->query("SELECT nrkonta FROM kontabankowe WHERE nrkonta='$r_nrkonta'");
if (!$rezultat2)
    throw new Exception($polaczenie->error);

$ile_takich_nrkonta = $rezultat2->num_rows;
if ($ile_takich_nrkonta > 0)
{
    $wszystko_ok = false;
}

2 个答案:

答案 0 :(得分:0)

您需要使用do-while循环:

do { $wszystko_ok = true; $r_nrkonta = rand(1000000000, 9999999999); $rezultat2 = $polaczenie->query("SELECT nrkonta FROM kontabankowe WHERE nrkonta='$r_nrkonta'"); if (!$rezultat2) throw new Exception($polaczenie->error); $ile_takich_nrkonta = $rezultat2->num_rows; if ($ile_takich_nrkonta > 0) { $wszystko_ok = false; } } while ($wszystko_ok == false);

我只是猜测你变量的含义,但我认为你明白了。

答案 1 :(得分:0)

为简单起见,这里将in_array调用替换为SQL SELECT。

<?php

$acs = 
[
    '1',
    '2',
    '3'
];

$limit = 10;
$tries = 0;
while(true)
{
    $tries++;
    if($tries >= $limit)
        throw new Exception('New AC number generation attempts exceeded.');

    $new_ac = rand(1,10);
    if(!in_array($new_ac, $acs))
        break;
}

var_dump($new_ac, $tries);