Сега ще ви покажа един метод как може да генерирате уникален код.
Така ще започнем от структурата на базата данни.
Тя е една таблица с едно поле, в което ще се записват създадените до момента кодове.
Така ето я:
CREATE TABLE `codes` (
`code` varchar(250) NOT NULL default ''
);
Ето и самия скрипт за генериране на уникален код.
<?php
// CONFIG //
// Връзка с базата данни
$db_conn = mysql_connect("localhost", "root", "password") or die(mysql_error());
mysql_select_db("database", $db_conn) or die(mysql_error());
define(COUNT_SIMBOLS,8); // тук дефинираме колко символа да бъде кода
define(ALL_SIMBOLS,'0123456789qwertyuioplkjhgfdsazxcvbnm'); // тук слагаме символите, от които да се генерира кода
// CONFIG //
$code = substr(str_shuffle(ALL_SIMBOLS),0,COUNT_SIMBOLS);
$continue = false;
while (!$continue) {
$query = mysql_query("SELECT `code` FROM `codes` WHERE `code` =
'$code'"); // проверяваме за кода в базата данни за да сме сигурни, че
кода ще бъде напълно уникален :)
if (mysql_num_rows($query) == 0) { // проверяваме дали вече има такъв код, ако няма продължаваме
mysql_query("INSERT INTO `codes` (`code`) VALUES ('$code')"); //
добавяме кода в базата данни за да сме сигурни, че няма да бъде
повторен
$continue = true;
} else {
$code = substr(str_shuffle(ALL_SIMBOLS),0,COUNT_SIMBOLS); // тук
генерираме нов код, ако предишния генериран е съществувал в базата
$continue = false;
}
}
// връшаме променливата "$code" с уникалния код. Вече може да я правите каквото поискате ;)
echo $code;
?>
Урокът е авторски и забранявам преписването му в други сайтове без мое съгласие!
Например между проверката дали има такъв код в базата данни (БД) и самото записване може някой друг да генерира и запише такъв код (например два потребителя едновременно ползват услугата). По-добре е тази задача да се възложи на самата база - чрез дефиниране на първичен ключ (англ. Primary Key). Освен това може да се спести една операция с БД (проверка за съществуващ ключ) и направо да се прави опит за запис, който ще е успешен ако няма и неуспешен ако такъв ключ вече има.
Ето и промените:
// Дефинираме таблицата с поле-ключ (PRIMARY KEY), така че базта данни да не позволява дублиране на кодовете
CREATE TABLE codes (
code varchar(250) NOT NULL default '',
PRIMARY KEY (code)
);