Уникално ид...

Genius_m

Registered
Искам да попитам как мога да си направя като се регистрираш да получаваш уникално ид с което да влизаш в системата.. Става дума за такова както е във бгтоп, получаваш 10 цифрено ид и със него влизаш.. Надявам се да сте ме разбрали.. :)
 
Може с ранд, а ако пък решиш и други символи, а не само цифри, можеш да ползваш тази функция:
PHP:
function rand_str($length = 10, $chars = '1234567890')
{
    $chars_length = (strlen($chars) - 1);
    $string = $chars{rand(0, $chars_length)};
    for ($i = 1; $i < $length; $i = strlen($string))
    {
        $r = $chars{rand(0, $chars_length)};
        if ($r != $string{$i - 1}) $string .=  $r;
    }
    return $string;
}

$length - броя на символите
$chars - символите, които искаш да се показват в генерирания стринг

А за да я използваш, пишеш:
PHP:
$id=rand_str();

И след което както ти казаха по-нагоре генерираш, проверяваш дали не се повтаря, ако не се го записваш в БД. А ако се повтаря генерираш ново.
 
Ами ако се повтори кода и потребителя наново ли трябва да си въвежда информацията... ?
 
Genius_m каза:
Ами ако се повтори кода и потребителя наново ли трябва да си въвежда информацията... ?
Е ще генерираш докато стане различно от текущите.
 
Не е нужно. Ето един примерен код:
PHP:
<?
$bul=false;
while($bul<>true) 
{
$id=rand(1000000000, 9999999999);
$sql=mysql_query("SELECT id FROM tablica WHERE id='$id'") or die(mysql_error());
if(mysql_num_rows($sql) == 0) 
{
$bul=true;
}
}
?>

Генерира кода, проверява дали има такова id вече. Ако няма т.е. mysql_num_rows($sql) == 0, то $bul=true и цикъла прекъсва. А ако пък има съвпадение $bul си отстава false и така докато не стане true . Надявам се да си го разбрал. Ако някой има по-рационална идея от моята, нека да я даде. :)
 
Значи аз имам регистрационна система където ще добавя този код и ако има съвпадение на ид-то потребителя наново ли трябва да си въвежда информацията за акалнта или то автоматично ще създаде ново ид без да дава някакви грешки... То е малък шанса при 10 цифрено число да има съвпадение... :)
 
Е затова е този код. Както обясних, той генерира id докато то не е уникално. Само трябва да си настроиш заявката.
 
1 съвет - може и възможноста да е малка, но с rand може да се падне еднакво число на 2 потребителя и тогава се досещаш какво ще стане. Използвай time().
 
Karcho каза:
1 съвет - може и възможноста да е малка, но с rand може да се падне еднакво число на 2 потребителя и тогава се досещаш какво ще стане. Използвай time().
Затова съм му дал кода по-нагоре. :)
 
akatsuki каза:
Karcho каза:
1 съвет - може и възможноста да е малка, но с rand може да се падне еднакво число на 2 потребителя и тогава се досещаш какво ще стане. Използвай time().
Затова съм му дал кода по-нагоре. :)
Няма нужда от такива сложности като time() си винаги различно. (логично е - секунди са)
 
А някакъв примерен код със time() и за по сигорно пак да има проверка дали съществува.. :)
 
Genius_m каза:
А някакъв примерен код със time() и за по сигорно пак да има проверка дали съществува.. :)
Няма смисъл от проверка. Няма никаква вероятност да се повтори освен ако не се регистрират два потребителя в ЕДНА и съща секунда. Няма нужда от пример просто в заявката заменяш твоето генерирано число или каквото е с time().
 

Back
Горе