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;