所以我试图通过PHP创建独立的网页,以便我努力学习。
我想要做的是为我网站上的每个条目创建唯一的网址。
让我们说我的网站很简单,它只是要求用户输入一个名字并将其记录到数据库中,并为该用户创建一个唯一的URL,这样他就可以访问他的网址并查看他的名字。
我希望为每个用户创建一个网址,让我们说最多8个字符a-z A-Z 0-9
,看起来像url.com/uI53841a
因此,如果John去创建一个网站,它会创建一个网址,例如,他可以访问url.com/uI53841a
。
我的数据库如下所示:
create table if not exists `entry` (
`uniqueURL` VARCHAR(8),
`name` VARCHAR(16),
primary key (`uniqueURL`)
) engine=innodb default charset=utf8;
如何为每个向我的网站提交姓名的人生成唯一ID?我如何确保永远不会有任何重复?
我是PHP的新手并且正在尝试学习,我看到你可以创建md5散列但是你怎么能随机化它并检查没有重复?
答案 0 :(得分:4)
结帐library。
来自docs的小片段:
<?php
$hashids = new Hashids\Hashids();
$id = $hashids->encode(1, 2, 3);
$numbers = $hashids->decode($id);
var_dump($id, $numbers);
来自official site的更多信息。
P.S。
使用uniqueUrl
的主键contrait,您可以使用php检查插入的结果。如果失败,则表示违反了constrait。
您可以根据其他唯一字符串生成url,例如使用raw id
作为url(正如Dagon在回答的评论中所说)。但是如果你不想向用户公开你的数据库id,你应该使用上面提到的lib(它是从github引用的)。
答案 1 :(得分:0)
我找到了一个并且工作了一点,但也运作良好!
function keygen()
{
$chars = "abcdefghijklmnopqrstuvwxyz";
$chars .= "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$chars .= "0123456789";
while (1) {
$key = '';
srand((double) microtime() * 1000000);
for ($i = 0; $i < 8; $i++) {
$key .= substr($chars, (rand() % (strlen($chars))), 1);
}
break;
}
return $key;
}