【问题标题】:Create unique URL in PHP for each entry在 PHP 中为每个条目创建唯一的 URL
【发布时间】:2015-10-15 02:21:50
【问题描述】:

所以我正在尝试通过 PHP 创建独立的网页,以便我尝试学习。

我想做的是为我网站上的每个条目创建唯一的 URL。

假设我的网站很简单,它只是要求用户输入一个姓名并将其记录到数据库中,并为该用户创建一个唯一的 URL,以便他可以转到他的 URL 并查看他的姓名。

我希望为每个用户创建一个 URL,最多可以说 8 个字符 a-z A-Z 0-9,看起来像 url.com/uI53841a

因此,如果 John 去创建一个网站,它会创建一个 URL,例如,他可以访问 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 哈希,但是您如何随机化它并检查没有重复?

【问题讨论】:

  • php 有一个唯一的 id 函数,MySQL 也是如此。
  • 生成很容易,有多种方法。您可以查看 PHP 函数:uniqid()
  • @BrandonWhite 他从未说过随机,只是独一无二
  • @Dagon 我一定是看错了。哎呀。已编辑,谢谢。
  • 总是可以只使用自动递增字段中的 id - 这是一种常见的方法

标签: php


【解决方案1】:

查看此library

来自文档的小 sn-p:

<?php

$hashids = new Hashids\Hashids();

$id = $hashids->encode(1, 2, 3);
$numbers = $hashids->decode($id);

var_dump($id, $numbers);

更多信息来自official site

附:

使用uniqueUrl 的主键特征,您可以使用php 检查插入的结果。如果失败,则意味着违反了约束。

您可以简单地根据其他唯一字符串生成 url,例如使用原始 id 作为 url(正如 Dagon 在 cmets 中所说的那样)。但是,如果您不想将数据库 ID 暴露给用户(引用自 github),则应该使用上述 lib。

【讨论】:

  • 这很有趣,我一定会去看看!
  • 这太棒了!我一直在玩它,它正是我所需要的,我只需要创建一些东西来检查数据库并在它重复的情况下更多地随机执行它吗?我敢肯定这是一个非常小的机会
  • 肯定会选择矫枉过正的方法 :-)
  • @sonicboom,是的,您需要基于唯一字符串构建 url。我已经更新了答案。
  • @Dagon,我添加了关于简单使用 id 作为 url 的通知
【解决方案2】:

这是我发现并做了一些工作但效果很好的一个!

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

【讨论】:

  • 我喜欢你的剧本,这或多或少是我想要的。你在 5 年前把它贴在这里。你有任何关于碰撞的经验吗?
猜你喜欢
  • 2014-09-30
  • 2015-08-23
  • 1970-01-01
  • 1970-01-01
  • 2022-11-25
  • 1970-01-01
  • 1970-01-01
  • 2016-12-12
  • 1970-01-01
相关资源
最近更新 更多