0

再帰を使用して自分自身を呼び出すこの関数を開発しました。固有のアクティベーション コードを生成する必要があります。

1. 別のクラス ファイルの関数を使用して、ランダムな文字列が生成されます。(2 番目のコードを参照) 2. 重複がないように、アクティブ化テーブルでその文字列の一意性をチェックしています。3.ランダムな文字列が再生成された場合、チャンスが非常に少ないことはわかっていますが、チャンスを逃したくありません。だから私はそれをテーブルレコードと照合しています。

生成されたアクティブ化されたコードが既に存在する場合、関数はそれ自体を再度呼び出して新しいアクティブ化コードを生成する必要があり、テーブル レコードに存在しない一意のアクティブ化コードを取得するまでプロセス全体が続行されます。

私の質問は、それを正しくコーディングしたか、つまり再帰部分かということです。それが正しくない場合、またはこれを達成するためのより良い方法または効果的な方法がある場合はお知らせください。

注: クラス ファイルからこれらの関数を呼び出しています。簡単に言えば、私は OOP を使用しています。したがって、再帰を呼び出すコードを知る必要があります。

return generateUniqueActivationCode();

また

return $this->generateUniqueActivationCode();

どんな助けでも大歓迎です。

    // Generate Unique Activation Code
    //*********************************************************************************
    public function generateUniqueActivationCode()
    {
        $mysql = new Mysql();
        $string = new String();

        // This is coming from the 2nd part of code snippet that I have added
        $activation_code = $string->generateActivationCode();

        // Is Activation Code Unique Check
        $sql = "SELECT activation_id FROM ". TABLE_ACTIVATION_CODES ." WHERE activation_code='$activation_code' LIMIT 1";
        $query = $mysql->query($sql);

        if($mysql->rowCount($query) > 0)
        {
            // This function is calling itself recursively
            return generateUniqueActivationCode();
        }
        else
        {
            return $activation_code;
        }
    }

これは、ランダムアクティベーションコードを生成するためのコードです

class String
{
    // Generates A Random String (Can be used for generating password etc.)
    //*********************************************************************************
    public function generateRandomString($noofchars=8)
    {
        $salt = "ABCDEFGHIJKLMNOPQRSTUVWXYZabchefghjkmnpqrstuvwxyz0123456789";
        srand((double)microtime()*1000000);
        $i = 0;
        while ($i <= $noofchars)
        {
            $num = rand() % 33;
            $tmp = substr($salt, $num, 1);
            $string = $string . $tmp;
            $i++;
        }
        return $string;
    }   
}
?>
4

1 に答える 1

0

次のように入力します。

public function generateUniqueActivationCode(){
        $mysql = new Mysql();
        $string = new String();
        do{
            $activation_code = $string->generateActivationCode();
            $sql = "SELECT activation_id FROM ". TABLE_ACTIVATION_CODES ." WHERE activation_code='$activation_code' LIMIT 1";
            $query = $mysql->query($sql);
        }while($mysql->rowCount($query) > 0);
        return $activation_code;
    }

Do (ATLEAST 1 回実行) を行いますが、rowCount が 0 より大きい値を返す限り繰り返します。

于 2012-12-18T06:27:31.273 に答える