Hoppas detta hjälper:
a) Jag gjorde något väldigt likt detta där jag genererade unika koder som skulle användas som URL:er. Jag skrev detta för att generera koderna:
private function _generateCode($length = 5) {
$characters = 'bcdfghjkmnpqrstvwxyz';
$string = '';
for ($i = 0; $i < $length; $i++) {
$string .= $characters[rand(0, strlen($characters) - 1)];
}
return $string;
}
$characters är en sträng med "tillåtna" tecken. Vi valde att ta bort vokalerna så att det inte fanns någon chans att göra oönskade ord :) Detta kunde du ändra på. Det finns enklare sätt att skriva det på men vi behövde något ganska specifikt.
Du skulle använda det så här:
$unique_code = _generateCode();
b) För detta är det bara att linda in din insert-sats i en select-satskontroll för den unika koden. Om koden finns, generera en annan kod och försök igen. Ett sätt du kan göra detta på är (OBS:detta är inte testat och det kan vara mottagligt för en oändlig loop om du råkar hamna i en situation där du har använt upp alla dina koder;) Och du bör nog lägga till en check för att säkerställa att INSERT lyckades):
$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) För att infoga den unika koden lägg bara till detta i din infoga-sats där $unique_code är variabeln som tilldelas returvärdet från funktionen ovan:
$mysqli->query("INSERT INTO coming_soon_emails (email,unique_code) VALUES ('".$mysqli->real_escape_string($_POST['email'])."','$unique_code')");
d) Jag upprepar bara variabeln du tilldelade koden till t.ex.:
echo $unique_code;