Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Eindeutiger Code basierend auf einer eindeutigen E-Mail-Adresse in der MySQL-Tabelle?

Hoffe, das hilft:

a) Ich habe etwas sehr Ähnliches gemacht, wo ich eindeutige Codes generiert habe, die als URLs verwendet werden sollten. Ich habe dies geschrieben, um die Codes zu generieren:

private function _generateCode($length = 5) {

    $characters = 'bcdfghjkmnpqrstvwxyz';

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

    return $string;

}

$characters ist eine Folge von "erlaubten" Zeichen. Wir haben uns dafür entschieden, die Vokale zu entfernen, damit keine unerwünschten Wörter entstehen :) Sie können dies ändern. Es gibt einfachere Möglichkeiten, es zu schreiben, aber wir brauchten etwas ganz Spezifisches.

Sie würden es wie folgt verwenden:

$unique_code = _generateCode();

b) Verpacken Sie dazu einfach Ihre Einfügeanweisung in eine Auswahlanweisungsprüfung für diesen eindeutigen Code. Wenn der Code vorhanden ist, generieren Sie einen anderen Code und versuchen Sie es erneut. Eine Möglichkeit, dies zu tun, ist (NB:Dies ist nicht getestet und kann anfällig für eine Endlosschleife sein, wenn Sie zufällig in eine Situation geraten, in der Sie alle Ihre Codes aufgebraucht haben;) Und Sie sollten wahrscheinlich eine Überprüfung hinzufügen um sicherzustellen, dass das INSERT erfolgreich war):

$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) Um den eindeutigen Code einzufügen, fügen Sie dies einfach zu Ihrer Einfügeanweisung hinzu, wobei $unique_code die Variable ist, der der Rückgabewert der obigen Funktion zugewiesen ist:

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

d) Wiederholen Sie einfach die Variable, der Sie den Code zugewiesen haben, z. B.:

echo $unique_code;