benzersiz rastgele id

3 Cevap php

Benim küçük uygulama için benzersiz kimliği üreten ama bazı variable scope sorunla karşı karşıya duyuyorum. Benim kod-

function create_id()
{  
global $myusername;  
$part1 = substr($myusername, 0, -4);  
$part2 = rand (99,99999);  
$part3 = date("s");  
return $part1.$part2.$part3;  
}

$id;  
$count=0;

while($count == 1)  
{  
$id;  
$id=create_id();  
$sqlcheck = "Select * FROM ruser WHERE userId='$id';";  
$count =mysql_query($sqlcheck,$link)or die(mysql_error());  
}  


echo $id;  

Ben global olarak beyan etmek zorunda olan değişken bilmiyorum

3 Cevap

Bu bir değişken kapsamı sorun gibi görünmüyor, bu basit bir değişken atamak sorunu gibi görünüyor:

$count=0;
while($count == 1)
{

Bu blok açıkça yürütmek asla.

Boolean kontrolleri yaparken, ayrıca iyi bir isim ile bir boolean kullanın lütfen. O kadar çok temizleyici okur. yani:

function isUniqueUserID($userIDToCheck)
{
    $sqlcheck = "Select * FROM user WHERE userId='$userIDToCheck';";  
    $resource = mysql_query($sqlcheck)or die(mysql_error()); 
    $count = mysql_fetch_assoc($resource);
    if( count($count) > 0)
    {return false;}

    return true;
}


$userIDVerifiedUnique = false;
while(! $userIDVerifiedUnique )
{
     $userIDToCheck = create_id();
     $userIDVerifiedUnique = isUniqueUserID($userIDToCheck );
}

Note that mysql_query will use the last used connection if you don't specify a link: http://us2.php.net/mysql_query No need to make it global.

Zak cevabı adition ben yerine küresellerle kullanarak fonksiyonuna adı geçerdi

function create_id($username)
{
    $part1 = substr($username, 0, -4);  
    $part2 = rand (99,99999);  
    $part3 = date("s");  
    return $part1.$part2.$part3;  
}

ayrıca

//$id;  no need for this
$count=1; // this bit

while($count == 1)   // not sure what's going on
{  
//$id; again same thing  no need for this
$id=create_id($myusername);

edit: now that i think of it: how do you expect to find "Select * FROM ruser WHERE userId='$id';"? A Select query is used to find something specific, your username is so random, i think the likely hood of actually successfully getting a record is 1 in a bajillion.
edit2 whoops, i see the whole point is to get a unique username... O_O

Diğerlerine ilaveten:

$count =mysql_query($sqlcheck,$link)or die(mysql_error());  

mysql_query yerine, bir kaynak bir rekor sayısını döndürür ama değil.

mysql_query