短网址平台:实现短链接标签修改时的查重校验
短链接标签查重与修改限制实现方案
一、改造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
相关产品推荐
相关产品推荐

