更多



帝国CMS通过AJAX在后台发布信息时验证标题是否重复的方法 不指定

郝聪 , 2018/01/15 18:14 , 建站优化 , 评论(0) , 阅读(1612) , Via 本站原创 | |

1.后台-》管理数据表-》找到title字段-》输入表单替换html代码

XML/HTML代码
        
  1. <input type=text name=title value="<?=ehtmlspecialchars(stripSlashes($r[title]))?>" size="60">    

替换为

XML/HTML代码
        
  1. <input type=text name=title value="<?=ehtmlspecialchars(stripSlashes($r[title]))?>" size="60" onblur="checkTitle()">  

然后再输入表单最下面添加如下代码

XML/HTML代码
        
  1. <!--以下代码检测标题是否重复-->  
  2.     
  3. <script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/1.9.0/jquery.min.js"></script>
  4.     
  5. <script type="text/javascript" src="/js/jquery-1.7.2.min.js"></script> //修改为自己的JQ库地址
  6.     
  7. <script type="text/javascript">  
  8.     
  9. function checkTitle()  
  10.     
  11.     {  
  12.     
  13.         var classid='<?=$_GET[classid]?>';  
  14.     
  15.         var id='<?=$_GET[id]?>';  
  16.     
  17.         var tit=document.add.title.value;  
  18.     
  19.         console.log("我是标题="+tit);  
  20.     
  21.         console.log("我是classid="+classid);  
  22.     
  23.         console.log("我是id="+id);  
  24.     
  25.         $.ajax({  
  26.     
  27.             url: 'ReTitleAjax.php?classid='+classid+'&id='+id+'&title='+tit,  
  28.     
  29.             dataType:"json",  
  30.     
  31.             cache: false,  
  32.     
  33.             error: function(){  
  34.     
  35.                 alert("检测失败,请重试");  
  36.     
  37.             },  
  38.     
  39.             success: function(data){  
  40.     
  41.                 if (data==1){  
  42.     
  43.                     alert('重复标题');  
  44.     
  45.                 }  
  46.     
  47.                 if (data==0){  
  48.     
  49.                     //alert('可以添加信息');  
  50.     
  51.                     console.log("可以添加信息");  
  52.     
  53.                 }  
  54.     
  55.             }  
  56.     
  57.         });  
  58.     
  59.     }  
  60.     
  61. </script>  

接着新建一个php文件,保存在 /e/admin/ReTitleAjax.php ,代码如下

XML/HTML代码
        
  1. <?php
  2.     
  3. define('EmpireCMSAdmin','1');    
  4.     
  5. require("../class/connect.php");    
  6.     
  7. require("../class/db_sql.php");    
  8.     
  9. require("../class/functions.php");    
  10.     
  11. require LoadLang("pub/fun.php");    
  12.     
  13. require("../data/dbcache/class.php");    
  14.     
  15. $link=db_connect();    
  16.     
  17. $empire=new mysqlquery();    
  18.     
  19. $editor=1;    
  20.     
  21. //验证用户    
  22.     
  23. $lur=is_login();    
  24.     
  25. $logininid=$lur['userid'];    
  26.     
  27. $loginin=$lur['username'];    
  28.     
  29. $loginrnd=$lur['rnd'];    
  30.     
  31. $loginlevel=$lur['groupid'];    
  32.     
  33. $loginadminstyleid=$lur['adminstyleid'];    
  34.     
  35.     
  36.     
  37. $classid=(int)$_GET['classid'];    
  38.     
  39. $id=(int)$_GET['id'];    
  40.     
  41. $title=AddAddsData($_GET['title']);    
  42.     
  43. $where='';    
  44.     
  45. if($id)    
  46.     
  47. {    
  48.     
  49. $where=' and id<>'.$id;    
  50.     
  51. }    
  52.     
  53. //已审核    
  54.     
  55. $num=$empire->gettotal("select count(*) as total from {$dbtbpre}ecms_".$class_r[$classid][tbname]." where title='".addslashes($title)."'".$where." limit 1");    
  56.     
  57. //未审核    
  58.     
  59. if(emptyempty($num))    
  60.     
  61. {    
  62.     
  63. $num=$empire->gettotal("select count(*) as total from {$dbtbpre}ecms_".$class_r[$classid][tbname]."_check where title='".addslashes($title)."'".$where." limit 1");    
  64.     
  65. }    
  66.     
  67. echo json_encode($num);
        
  68.     
  69. ?>

上面是采用post查询返回json结果的方式来实现查重,我们还可以通过get方式,js函数如下:

XML/HTML代码
        
  1. <script type="text/javascript">    
  2.     
  3. function  checkTitle()  
  4.     
  5. {    
  6.     
  7.     var classid='<?=$_GET[classid]?>';    
  8.     
  9.     var id='<?=$_GET[id]?>';    
  10.     
  11.     var tit=document.add.title.value;    
  12.     
  13.         var answerurl='ReTitleAjax.php';    
  14.     
  15.         $.get(answerurl+"?classid="+classid+'<?=$ecms_hashur['ehref']?>&title='+tit, function(data){    
  16.     
  17.             if(data){    
  18.     
  19.                 if(data==1){    
  20.     
  21.                     $("#titletips").html("<font color='red'>已经存在此名称,请检查是否已经添加过</font>");    
  22.     
  23.                 }    
  24.     
  25.                 else{    
  26.     
  27.                     $("#titletips").html("<font color='green'>可以添加信息</font>");    
  28.     
  29.                 }    
  30.     
  31.                 return false;    
  32.     
  33.             }    
  34.     
  35.             else{    
  36.     
  37.                 $("#titletips").html("<font color='red'>检测失败,请重试</font>");    
  38.     
  39.             }    
  40.     
  41.         });      
  42.     
  43. }    
  44.     
  45. </script>    

接着在title字段的input后放一个容器用于存储提示信息,例如<span id="titletips"></span>,还可以通过在出现重复时禁用其他input输入等方式来限制,这里只是给出原理,大家可在此基础上发挥。

注:如在帝国cms7.2版本开启金刚模式或刺猬模式下使用,需要在js函数中加入hash验证字符串,并在php处理文件中加入验证函数,否则会出现访问验证页面空白无法返回数据。

 



最后编辑: 郝聪 编辑于2018/01/15 18:22
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]