Question

hi je crée un système qui traite et identité et une UID, l'UID que nous générons au hasard, mais je suis un peu coincé, je dois toujours générer une UID qui n'existe pas actuellement dans la DB car le champ est unchamp unique utilisé à l'extrémité avant de ne pas exposer l'identifiant réel.

afin de récapituler, j'essaie de générer une carte d'identité unique qui n'existe pas actuellement dans la DB La partie que je n'ai pas de travail est la vérification croisée dans la DB, donc elle donnera parfois un certain nombre qui existe déjà dans ledB même si cela ne devrait pas être merci d'avance.

Ceci est mon code jusqu'à présent:

function uniqueID($table) 
{
$db = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);

$possible = '1234567890';
$code = '';
$characters = mt_rand(7,14);
$i = 0;

while($i < $characters) 
{ 

    $code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
    $i++;

}

$result = $db->query('
SELECT uniqueID
FROM '.$table.'
WHERE uniqueID = "'.$code.'"
LIMIT 1
');

$totalRows = $result->num_rows;

if(!$result)
{

    return $db->error;

}
else
{

    if($totalRows > 0)
    {

        return uniqueID($table);

    }
    else
    {

        return $code;

    }

}

}

Était-ce utile?

La solution 6

J'ai compris ce que le problème était déjà, comme je l'ai mentionné à tous, la génération de code n'était pas la question!La question était que la vérification croisée ne fonctionnait pas correctement.Donc tout ce que j'ai fait a été supprimé cette boucle

while($i < $characters) 
{ 

    $code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
    $i++;

}

Comme cela faisait finir mon identifiant unique de se tromper.

Autres conseils

Pour générer unic UID, vous pouvez utiliser le temps, je pense que c'était une très petite Chanse que les enregistrements seront ajoutés dans la même seconde, avec deux données aléatoires.

écrire une fonction qui vous le renvoie comme ça

function generate_uid(){
 return md5(mktime()."-".rand()."-".rand());
}

dans php il y a une fonction appelée uniqid()

http://php.net/manual/fr/function.uniqid.php

Je pourrais parler de la génération d'identifiants, comme les autres l'ont fait, mais ce n'est pas votre question. Votre requête semble bien.S'il renvoie 0 rangées, mais vous semblez trouver le code dans la base de données, alors il ne ressemble probablement que de la même manière, mais n'est-ce pas.Cela pourrait être rembourré par des espaces.

Un moyen de résoudre ce problème consiste à sélectionner la dernière ligne de votre base de données d'utilisateurs et à rechercher votre script pour rechercher le champ ID (vous pouvez y parvenir en effectuant une commande de sélection par ID en mode descendant), vous pouvez utiliser cette infopour randomiser des nombres supérieurs à cet identifiant.

Modifier

$result = $db->query('
SELECT uniqueID
FROM '.$table.'
');

$already_in_database = array();
while ($row = mysql_fetch_array($result)){
    $already_in_database[] = $row['UID'];    
}

$new = rand(0,$some_max_value);
while(in_array($new,$already_in_database)){
    $new = rand(0,$some_max_value);
}

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top