Mam nadzieję, że to pomoże:
a) Zrobiłem coś bardzo podobnego do tego, gdzie generowałem unikalne kody, które miały być używane jako adresy URL. Napisałem to, aby wygenerować kody:
private function _generateCode($length = 5) {
$characters = 'bcdfghjkmnpqrstvwxyz';
$string = '';
for ($i = 0; $i < $length; $i++) {
$string .= $characters[rand(0, strlen($characters) - 1)];
}
return $string;
}
$characters to ciąg "dozwolonych" znaków. Zdecydowaliśmy się usunąć samogłoski, aby nie było szans na zrobienie niechcianych słów :) Możesz to zmienić. Są prostsze sposoby na napisanie tego, ale potrzebowaliśmy czegoś całkiem konkretnego.
Używałbyś go w ten sposób:
$unique_code = _generateCode();
b) W tym celu po prostu zapakuj swoją instrukcję INSERT w SELECT, aby sprawdzić ten unikalny kod. Jeśli kod istnieje, wygeneruj kolejny kod i spróbuj ponownie. Jednym ze sposobów, w jaki możesz to zrobić, jest (Uwaga:nie jest to testowane i może być podatne na nieskończoną pętlę, jeśli znajdziesz się w sytuacji, w której zużyłeś wszystkie swoje kody;) I prawdopodobnie powinieneś dodać czek aby upewnić się, że WSTAWKA zakończyła się powodzeniem):
$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) Aby wstawić unikalny kod, po prostu dodaj to do swojej instrukcji insert, gdzie $unique_code jest zmienną, której przypisano wartość zwracaną z powyższej funkcji:
$mysqli->query("INSERT INTO coming_soon_emails (email,unique_code) VALUES ('".$mysqli->real_escape_string($_POST['email'])."','$unique_code')");
d) Po prostu powtórz zmienną, do której przypisałeś kod, np.:
echo $unique_code;