Hy vọng điều này sẽ giúp:
a) Tôi đã làm điều gì đó rất giống với điều này, trong đó tôi đang tạo các mã duy nhất được sử dụng làm URL. Tôi viết cái này để tạo mã:
private function _generateCode($length = 5) {
$characters = 'bcdfghjkmnpqrstvwxyz';
$string = '';
for ($i = 0; $i < $length; $i++) {
$string .= $characters[rand(0, strlen($characters) - 1)];
}
return $string;
}
$ ký tự là một chuỗi ký tự "được phép". Chúng tôi đã chọn loại bỏ các nguyên âm để không có cơ hội tạo ra các từ không mong muốn :) Bạn có thể thay đổi điều này. Có nhiều cách đơn giản hơn để viết nó nhưng chúng tôi cần một cái gì đó khá cụ thể.
Bạn sẽ sử dụng nó như thế này:
$unique_code = _generateCode();
b) Đối với điều này, chỉ cần bọc câu lệnh chèn của bạn trong một câu lệnh chọn kiểm tra mã duy nhất đó. Nếu mã tồn tại, hãy tạo một mã khác và thử lại. Một cách bạn có thể làm là (NB:cái này không được kiểm tra và nó có thể dễ bị lặp lại vô hạn nếu bạn tình cờ gặp tình huống bạn đã sử dụng hết tất cả các mã của mình;) Và bạn có thể nên thêm một kiểm tra để đảm bảo INSERT thành công):
$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) Để chèn mã duy nhất, chỉ cần thêm mã này vào câu lệnh chèn của bạn trong đó $ unique_code là biến được gán giá trị trả về từ hàm trên:
$mysqli->query("INSERT INTO coming_soon_emails (email,unique_code) VALUES ('".$mysqli->real_escape_string($_POST['email'])."','$unique_code')");
d) Chỉ cần lặp lại biến mà bạn đã gán mã cho ví dụ:
echo $unique_code;