You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

短网址平台:实现短链接标签修改时的查重校验

短链接标签查重与修改限制实现方案

一、改造functions.php添加短标签查重函数

基于现有函数结构,新增一个检查短链接标签是否被占用的函数,同时排除当前正在编辑的URL(避免用户保留原标签时误判):

<?php
/* allow specific url */
function denyotherdomainsthan($url)
{
    $strAllow = 'mydomain.com'; 
    $strBase  = getBaseUrl($url);
    if(strpos($url, $strAllow) === false)
    {
        return true;
    }
}

/* 检查短链接标签是否已被占用 */
function isShortUrlTagTaken($tag, $excludeUrlId = 0)
{
    $db = Database::getDatabase(true);
    // 查询数据库中是否存在该标签,排除当前编辑的URL
    $count = $db->getValue("SELECT COUNT(id) FROM shorturl WHERE shortUrl = :tag AND id != :excludeId", 
        array('tag' => $tag, 'excludeId' => $excludeUrlId));
    return $count > 0;
}
?>

二、修改index.php添加查重验证逻辑

在提交处理的验证环节,加入短标签查重检查,放在原有URL验证逻辑之后:

/* update user */
if ((int) $_REQUEST['submitme'])
{
    // 原有内容清理逻辑
    $original_url = trim($_REQUEST['original_url']);
    $original_url = strip_tags($original_url);
    $original_url = str_replace("\n", "", $original_url);
    $original_url = str_replace("\r", "", $original_url);
    $short_url    = trim($_REQUEST['short_url']);
    $short_url = strip_tags($short_url);
    $short_url = str_replace("\n", "", $short_url);
    $short_url = str_replace("\r", "", $short_url);
    $status       = trim($_REQUEST['status']);
    $privatestats = (int)$_REQUEST['privatestats'];

    $shortUrlFolder = null;
    if ((int) $_REQUEST['shortUrlFolder'])
    {
        $shortUrlFolder = $_REQUEST['shortUrlFolder'];
    }

    // 原有URL有效性验证
    if (!isValidUrl($original_url))
    {
        setError(t("error_with_urls", "There was an error with the url you supplied, please check and try again."));
    }
    elseif (substr(strtolower($original_url), 0, strlen(WEB_ROOT)) == strtolower(WEB_ROOT))
    {
        setError(t("can_not_create_url_on_this_site"));
    }
    // 新增短标签查重验证
    elseif (isShortUrlTagTaken($short_url, $urlId))
    {
        setError(t("Short Url Already Taken"));
    }
   
    $status = 'active';

    // 原有更新逻辑
    if (!isErrors())
    {
        $db = Database::getDatabase(true);
        $rs = $db->query('UPDATE shorturl SET shortUrl = :shortUrl, originalUrl = :originalUrl, status = :status, expiryDate=null, shortUrlFolder=:shortUrlFolder, privatestats=:privatestats WHERE id = :id', array('originalUrl'    => $original_url, 'shortUrl'    => $short_url, 'status'         => $status, 'shortUrlFolder' => $shortUrlFolder, 'privatestats' => $privatestats, 'id'             => $urlId));
        if ($rs)
        {
            setSuccess(t("url_edit_updated_success_message", "Url details successfully updated, <a href='[[[YOUR_URLS_LINK]]]'>click here</a> to go to your urls.", array('YOUR_URLS_LINK' => WEB_ROOT . '/account_home.' . SITE_CONFIG_PAGE_EXTENSION)));
        }
        else
        {
            setError(t("problem_updating_the_url_try_again_later", "There was a problem updating the url, please try again later"));
        }
    }
}

三、关键说明

  • 查重函数通过id != :excludeId排除当前编辑的URL,确保用户保留原标签时不会被误判为占用。
  • 验证逻辑放在原有URL验证之后,只有前面的验证全部通过,才会检查标签是否被占用。
  • 调用setError(t("Short Url Already Taken"))触发错误提示,与现有错误提示逻辑保持一致。

内容的提问来源于stack exchange,提问作者overhauler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 15:45:01