Rastgele bir belirteç oluşturmak, bir nüsha kontrol

0 Cevap php

Ben rastgele bir belirteç (AZ, az, 0-9) yapan bir php komut dosyası var:

    function token($length) {

    $characters = array(
    "A","B","C","D","E","F","G","H","J","K","L","M",
    "N","P","Q","R","S","T","U","V","W","X","Y","Z",
    "a","b","c","d","e","f","g","h","i","j","k","m",
    "n","o","p","q","r","s","t","u","v","w","x","y","z",
    "1","2","3","4","5","6","7","8","9");

    //make an "empty container" or array for our keys
    $keys = array();

    //first count of $keys is empty so "1", remaining count is 1-6 = total 7 times
    while(count($keys) < $length) {
        //"0" because we use this to FIND ARRAY KEYS which has a 0 value
        //"-1" because were only concerned of number of keys which is 32 not 33
        //count($characters) = 33
        $x = mt_rand(0, count($characters)-1);
        if(!in_array($x, $keys)) {
           $keys[] = $x;
        }
    }

    foreach($keys as $key){
        $random .= $characters[$key];
    }

    return $random;

}

Mükemmel çalışıyor, ama ben aynı belirteç önce kullanılan olmamıştı emin olmak için belirli bir veritabanı kontrol edebilmek istiyorum. Ve varsa onu anında çıktılamak önce taze bir belirteci yeniden olacaktır.

Ben bir nüsha kontrol etmek için bu komut dosyasını kullanabilirsiniz biliyorum:

$check = mysqli_query($mysqli, "SELECT ".$table.".token FROM ".$table." WHERE ".$table.".token = '".$random."'");

        if(mysqli_num_rows($check) > 0){

        //ERROR: DUPLICATE TOKEN, CREATE A NEW TOKEN NOW...

        }

Ben sadece hep birlikte eklemek, yinelenen bir veritabanında bulunursa, bu döngü tekrar olacak şekilde ve tekrar denemek için yardıma ihtiyacım var.

0 Cevap