Håber dette hjælper:
a) Jeg gjorde noget meget lig dette, hvor jeg genererede unikke koder, som skulle bruges som URL'er. Jeg skrev dette for at generere koderne:
private function _generateCode($length = 5) {
$characters = 'bcdfghjkmnpqrstvwxyz';
$string = '';
for ($i = 0; $i < $length; $i++) {
$string .= $characters[rand(0, strlen($characters) - 1)];
}
return $string;
}
$characters er en streng af "tilladte" tegn. Vi valgte at fjerne vokalerne, så der ikke var en chance for at lave uønskede ord :) Dette kunne du ændre. Der er enklere måder at skrive det på, men vi havde brug for noget helt specifikt.
Du ville bruge det sådan her:
$unique_code = _generateCode();
b) Til dette skal du blot pakke din insert-sætning ind i en select statement-check for den unikke kode. Hvis koden findes, så generer en anden kode og prøv igen. En måde du kan gøre dette på er (NB:dette er ikke testet, og det kan være modtageligt for en uendelig løkke, hvis du tilfældigvis kommer i en situation, hvor du har brugt alle dine koder;) Og du skal nok tilføje en check for at sikre, at INSERT var vellykket):
$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) For at indsætte den unikke kode skal du blot tilføje dette til din insert-sætning, hvor $unique_code er den variabel, der er tildelt returværdien fra funktionen ovenfor:
$mysqli->query("INSERT INTO coming_soon_emails (email,unique_code) VALUES ('".$mysqli->real_escape_string($_POST['email'])."','$unique_code')");
d) Bare gentag den variabel, du tildelte koden til, f.eks.:
echo $unique_code;