Doufám, že to pomůže:
a) Udělal jsem něco velmi podobného, když jsem generoval jedinečné kódy, které měly být použity jako adresy URL. Napsal jsem toto, abych vygeneroval kódy:
private function _generateCode($length = 5) {
$characters = 'bcdfghjkmnpqrstvwxyz';
$string = '';
for ($i = 0; $i < $length; $i++) {
$string .= $characters[rand(0, strlen($characters) - 1)];
}
return $string;
}
$characters je řetězec "povolených" znaků. Rozhodli jsme se odstranit samohlásky, aby nebylo možné vytvářet nechtěná slova :) Můžete to změnit. Existují jednodušší způsoby, jak to napsat, ale potřebovali jsme něco docela konkrétního.
Použili byste to takto:
$unique_code = _generateCode();
b) Za tímto účelem stačí zabalit váš příkaz insert do příkazu select a zkontrolovat tento jedinečný kód. Pokud kód existuje, vygenerujte jiný kód a zkuste to znovu. Jedním ze způsobů, jak to můžete udělat, je (Poznámka:toto není testováno a může to být náchylné k nekonečné smyčce, pokud se náhodou dostanete do situace, kdy jste spotřebovali všechny své kódy;) A pravděpodobně byste měli přidat kontrolu abyste se ujistili, že INSERT bylo úspěšné):
$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) Chcete-li vložit jedinečný kód, přidejte jej do příkazu vložení, kde $unique_code je proměnná, které je přiřazena návratová hodnota z výše uvedené funkce:
$mysqli->query("INSERT INTO coming_soon_emails (email,unique_code) VALUES ('".$mysqli->real_escape_string($_POST['email'])."','$unique_code')");
d) Stačí echo proměnnou, které jste přiřadili kód, např.:
echo $unique_code;