0

ランダムな文字列を作成するこの関数があります:

function genID($length) {
    $chars = "0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM@!"; 
    //only allowed chars in the blowfish salt.
    $size = strlen($chars); $str = "";
    for ($i = 0; $i < $length; $i++)
        $str .= $chars[rand(0, $size - 1)]; // strings can be used as char arrays
        // Yes, I am aware this salt isn't generated using the OS source.
        // use mycrypt_create_iv or /dev/urandom/
    return $str;
}

この出力は次のようになります。

@iBUQvldLq

今、私はそのようなものでユーザーリストを持っています:

  userid    |   username   |  usermail ...
--------------------------------------
@iBUQvldLq        test      test@gmaik.com ....

誰かが登録すると、新しい文字列をuserid作成し、新しい文字列をデータベースの行に挿入します。その後、新しい文字列を作成し、作成された新しい文字列が存在しないかどうかを確認します。次のようになります。

function newID()
{

     $newid = genID(10);
     $query = "SELECT * FROM users WHERE userid = '".$newid."'";
     $result1 = mysql_query($query);
     $num = mysql_num_rows($result1);
     if($num == 1)
     {
         $newid = genID(10);
         return $newid;
     }
     else
     {
         return $newid;
     }
}

チェック機能をループする方法を知っている人はいますか?

生成関数が新しいランダム文字列を作成し、関数が既に存在するかどうかを確認し、新しいものを作成し、そうでない場合は作成したものを返すことを意味します。

それで、彼が新しいものを作成し、新しいものも同じ other と一致する場合userid、新しい文字列が他の文字列と一致しないまでループするにはどうすればよいuseridですか?

ループのようなもの:

  1. 新しい文字列を作成

  2. 存在するかどうかを確認する

  3. 存在する場合は、新しいものを作成します

  4. 新しいものも存在する場合は、新しいものを作成します。

other と一致しないまでuserid、ループを作成します。何か考えはありますか?

編集済み:

必要に応じてループの新しい関数:

関数 newID(){

   $continue = true;

   while ($continue) {
   $newid = genID(10);
   $query = mysql_query("SELECT * FROM users WHERE userid='".$newid."' LIMIT 1");

    if (mysql_num_rows($query) != 1)
    $continue = false;
    return $newid;
}

}

$newid = newID();
4

3 に答える 3