为PHP中的每个条目创建唯一的URL

时间:2015-10-15 02:21:50

标签: php

所以我试图通过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散列但是你怎么能随机化它并检查没有重复?

2 个答案:

答案 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;
}