帝国CMS检测字段重复,其实这个帝国CMS就自带的,大家可以参考帝国CMS判断标题是否重复的代码,改成你的需要判断的代码就可以了。
但是有些情况帝国自带的标题重复方法达不到要求,下面我的站长站教大家如何自己手写一个帝国CMS检测字段重复教程。
方法一
HTML 示例代码:
<label for="siteurl">输入网址:</label> <input type="text" id="siteurl" name="siteurl" oninput="checkSiteUrl()"> <span id="result"></span> <script> function checkSiteUrl() { const siteurl = document.getElementById('siteurl').value; if (siteurl.trim() === '') return; // 发送 AJAX 请求到后端 fetch('/check-url', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ siteurl }) }) .then(response => response.json()) .then(data => { const resultElement = document.getElementById('result'); if (data.exists) { resultElement.style.color = 'red'; resultElement.textContent = '此网址已存在!'; } else { resultElement.style.color = 'green'; resultElement.textContent = '此网址可用。'; } }) .catch(error => console.error('Error:', error)); } </script>
后端php代码:
<?php header('Content-Type: application/json'); // 假设这是数据库中的已有 URL 列表 $existing_urls = [ "http://www.qq.com/", "https://qq.com", "http://example.com" ]; // 获取前端传来的数据 $input_url = $_POST['siteurl'] ?? ''; if (empty($input_url)) { echo json_encode(['exists' => false]); exit; } /** * 对 URL 进行标准化处理 */ function normalize_url($url) { // 解析 URL $parsed_url = parse_url($url); // 提取域名部分 $host = strtolower($parsed_url['host'] ?? ''); if (substr($host, 0, 4) === 'www.') { $host = substr($host, 4); // 去掉 www. } // 提取路径部分并去掉多余的斜杠 $path = isset($parsed_url['path']) ? rtrim($parsed_url['path'], '/') : ''; // 返回标准化后的 URL return [ 'host' => $host, 'path' => $path ]; } /** * 生成所有可能的 URL 变体 */ function generate_variations($normalized_url) { $variations = []; $protocols = ['http', 'https']; $host = $normalized_url['host']; $path = $normalized_url['path']; foreach ($protocols as $protocol) { // 不带 www. $variations[] = $protocol . '://' . $host . $path; // 带 www. $variations[] = $protocol . '://www.' . $host . $path; } return $variations; } // 标准化输入的 URL $normalized_input = normalize_url($input_url); // 生成所有可能的变体 $variations = generate_variations($normalized_input); // 检查变体是否存在于数据库中 $exists = false; foreach ($variations as $variation) { if (in_array($variation, $existing_urls)) { $exists = true; break; } } // 返回结果 echo json_encode(['exists' => $exists]); ?>
方法二
1.后台-》管理数据表-》找到title字段-》输入表单替换html代码
找到:
<input type=text name=title value="<?=ehtmlspecialchars(stripSlashes($r[title]))?>" size="60">
替换成:
<input type=text name=title value="<?=ehtmlspecialchars(stripSlashes($r[title]))?>" size="60" onblur="checkTitle()">
在最下面添加如下代码:(JQ库自己加入就进了,这里的链接用的绝对地址)
<script type="text/javascript" src="/js/jquery-1.7.2.min.js"></script> <script type="text/javascript">function checkTitle() { var classid=<?=$_GET[classid]?>; var id=<?=$_GET[classid]?>; var tit=document.add.title.value; console.log("我是标题="+tit); console.log("我是classid="+classid); console.log("我是id="+id); $.ajax({ url: 'ReTitleAjax.php?classid='+classid+'&id='+id+'&title='+tit, dataType:"json", cache: false, error: function(){ alert("检测失败,请重试"); }, success: function(data){ if (data==1){ alert('重复标题'); } if (data==0){ //alert('可以添加信息'); console.log("可以添加信息"); } } }); }</script>
2.新建一个PHP文件ReTitleAJAX.php添加如下代码到PHP代码中
define('EmpireCMSAdmin','1'); require("../class/connect.php"); require("../class/db_sql.php"); require("../class/functions.php"); require LoadLang("pub/fun.php"); require("../data/dbcache/class.php"); $link=db_connect(); $empire=new mysqlquery(); $editor=1; //验证用户 $lur=is_login(); $logininid=$lur['userid']; $loginin=$lur['username']; $loginrnd=$lur['rnd']; $loginlevel=$lur['groupid']; $loginadminstyleid=$lur['adminstyleid']; $classid=(int)$_GET['classid']; $id=(int)$_GET['id']; $title=AddAddsData($_GET['title']); $where=''; if($id) { $where=' and id<>'.$id; } //已审核 $num=$empire->gettotal("select count(*) as total from {$dbtbpre}ecms_".$class_r[$classid][tbname]." where title='".addslashes($title)."'".$where." limit 1"); //未审核 if(empty($num)) { $num=$empire->gettotal("select count(*) as total from {$dbtbpre}ecms_".$class_r[$classid][tbname]."_check where title='".addslashes($title)."'".$where." limit 1"); } echo json_encode($num)
然后把这个ReTitleAjax.php文件传到管理员目录也就是(/e/admin/目录下就可以了)