Mysql
 sql >> Base de données >  >> RDS >> Mysql

Code unique basé sur une adresse e-mail unique dans la table mysql ?

J'espère que cela vous aidera :

a) J'ai fait quelque chose de très similaire à celui-ci où je générais des codes uniques qui devaient être utilisés comme URL. J'ai écrit ceci pour générer les codes :

private function _generateCode($length = 5) {

    $characters = 'bcdfghjkmnpqrstvwxyz';

    $string = '';
    for ($i = 0; $i < $length; $i++) {
        $string .= $characters[rand(0, strlen($characters) - 1)];
    }

    return $string;

}

$characters est une chaîne de caractères "autorisés". Nous avons choisi de supprimer les voyelles afin qu'il n'y ait aucune chance de faire des mots indésirables :) Vous pouvez changer cela. Il existe des façons plus simples de l'écrire, mais nous avions besoin de quelque chose d'assez spécifique.

Vous l'utiliseriez comme ceci :

$unique_code = _generateCode();

b) Pour cela, enveloppez simplement votre instruction d'insertion dans une instruction select pour vérifier ce code unique. Si le code existe, générez un autre code et réessayez. Une façon de procéder est (NB :cela n'a pas été testé et il peut être susceptible de créer une boucle infinie si vous vous retrouvez dans une situation où vous avez utilisé tous vos codes ;) Et vous devriez probablement ajouter une vérification pour s'assurer que l'INSERT a réussi):

$unique_code = "";
$inserted = false;
// Keep looping until we've inserted a record
while(!$inserted) {
    // Generate a code
    $unique_code = _generateCode();
    // Check if it exists
    if ($result = mysqli->query("SELECT unique_code FROM coming_soon_emails WHERE unique_code = '$unique_code'")) {
        // Check no record exists
        if ($result->num_rows == 0) {
            // Create new record
            $mysqli->query("INSERT INTO coming_soon_emails (email,unique_code) VALUES ('" . $mysqli->real_escape_string($_POST['email']) . "','$unique_code')");
            // Set inserted to true to ext loop
            $inserted = true;
            // Close the result object
            $result->close();
        }
    } else {
        // Quit if we can't check the database
        die('Something went wrong with select');
    }   
}

// Output the code
echo $unique_code;

c) Pour insérer le code unique, ajoutez simplement ceci à votre instruction d'insertion où $unique_code est la variable affectée à la valeur de retour de la fonction ci-dessus :

$mysqli->query("INSERT INTO coming_soon_emails (email,unique_code) VALUES ('".$mysqli->real_escape_string($_POST['email'])."','$unique_code')");

d) Faites simplement écho à la variable à laquelle vous avez attribué le code, par exemple :

echo $unique_code;