我连接到我的数据库,用户提交他们的电子邮件地址。这存储在DB中。这是我从一个turorial抓住的东西。
我想在文档加载时通过JS生成用户唯一代码。 格式长度应为6位,仅使用A-Z和0-9。即:F4DRB6
完成后,我需要在DB中存储该用户的唯一代码 生成器应检查数据库中是否存在唯一代码,以确保它实际上是唯一的。
我遇到的麻烦是;我不知道如何以上述格式创建唯一代码,检查它是否是DB中唯一的,然后将其存储在与该用户对应的DB中。我假设另一列以某种方式匹配该行?
谢谢!
编辑:我试过这个..如果有任何错误请指出。感谢
function genRandomString() {
$length = 5;
$characters = '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$string = '';
for ($p = 0; $p < $length; $p++) {
$string .= $characters[mt_rand(0, strlen($characters))];
}
return $string;
}
do {
$random_string = $this->genRandomString();
} while (mysql_num_rows(mysql_query("SELECT referralcode FROM ".coming_soon_emails." WHERE rand_string='{$random_string}'")));
$q = "INSERT INTO ".coming_soon_emails." SET referralcode='{$random_string}'";
$result = mysql_query($q);
答案 0 :(得分:2)
为什么需要在客户端创建?为什么不能在客户提交“最终”表单时创建代码?
您可以创建此代码randomly,并将处理代码的列设置为unique
。如果您收到违规错误,请生成另一个错误,然后重试。
嗯,这是其中一种方法......
答案 1 :(得分:0)
简单的数学, 6 ^ 36足够大,创建随机ID大多是唯一的。
如果您想100%确定使用AJAX检查数据库中生成的ID并重新创建,如果存在。
答案 2 :(得分:0)
通过一种因果关系,简单的演练将是:
在mysql中写一个 function / SP :
首先,生成随机代码,正如AbiusX所说,取决于您的用户池大小,新代码可能很少使用。
这将为您生成一个十六进制字符,并且应该让您入门。
SELECT conv(FLOOR((RAND()* 16)),10,16);
然后您需要检查此代码是否已被使用。 `
SELECT * FROM usertable where code = generatedcode
如果是,请生成一个新的。
在一个更健壮的设置中,我总是预先生成唯一代码,并将它们存储在“未使用的代码”等表中,这样我就可以抓住任何代码并确保它是唯一的并且不使用。