Надявам се това да помогне:
а) Направих нещо много подобно на това, когато генерирах уникални кодове, които трябваше да се използват като URL адреси. Написах това, за да генерирам кодовете:
private function _generateCode($length = 5) {
$characters = 'bcdfghjkmnpqrstvwxyz';
$string = '';
for ($i = 0; $i < $length; $i++) {
$string .= $characters[rand(0, strlen($characters) - 1)];
}
return $string;
}
$characters е низ от "разрешени" знаци. Избрахме да премахнем гласните, така че да няма шанс да създаваме нежелани думи :) Можете да промените това. Има по-прости начини да го напишем, но ни трябваше нещо съвсем конкретно.
Ще го използвате по следния начин:
$unique_code = _generateCode();
б) За това просто увийте своя израз за вмъкване в проверка на изявление за избор за този уникален код. Ако кодът съществува, генерирайте друг код и опитайте отново. Един от начините, по които бихте могли да направите това е (NB:това не е тествано и може да е податливо на безкраен цикъл, ако случайно попаднете в ситуация, в която сте изразходвали всичките си кодове;) И вероятно трябва да добавите проверка. за да се уверите, че INSERT е бил успешен):
$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;
в) За да вмъкнете уникалния код, просто добавете това към вашия израз за вмъкване, където $unique_code е променливата, на която е присвоена връщаната стойност от функцията по-горе:
$mysqli->query("INSERT INTO coming_soon_emails (email,unique_code) VALUES ('".$mysqli->real_escape_string($_POST['email'])."','$unique_code')");
г) Просто повторете променливата, на която сте присвоили кода, например:
echo $unique_code;