Mysql
 sql >> Database >  >> RDS >> Mysql

Codice univoco basato sull'indirizzo email univoco nella tabella MySQL?

Spero che questo aiuti:

a) Ho fatto qualcosa di molto simile a questo in cui stavo generando codici univoci che dovevano essere utilizzati come URL. Ho scritto questo per generare i codici:

private function _generateCode($length = 5) {

    $characters = 'bcdfghjkmnpqrstvwxyz';

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

    return $string;

}

$characters è una stringa di caratteri "consentiti". Abbiamo scelto di rimuovere le vocali in modo che non ci fosse possibilità di creare parole indesiderate :) Potresti cambiarlo. Ci sono modi più semplici per scriverlo, ma avevamo bisogno di qualcosa di abbastanza specifico.

Lo useresti in questo modo:

$unique_code = _generateCode();

b) Per questo basta avvolgere la tua dichiarazione di inserimento in un controllo di dichiarazione selezionato per quel codice univoco. Se il codice esiste, genera un altro codice e riprova. Un modo in cui potresti farlo è (NB:questo non è testato e potrebbe essere suscettibile di un ciclo infinito se ti capita di entrare in una situazione in cui hai esaurito tutti i tuoi codici;) E probabilmente dovresti aggiungere un segno di spunta per assicurarsi che INSERT abbia avuto successo):

$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) Per inserire il codice univoco, aggiungilo alla tua istruzione di inserimento dove $codice_univoco è la variabile a cui è stato assegnato il valore restituito dalla funzione sopra:

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

d) Fai solo eco alla variabile a cui hai assegnato il codice, ad esempio:

echo $unique_code;