各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案

Str Tom,为分享PHP技术和解决方案,贡献一份自己的力量!
收藏本站(不迷路),每天更新好文章!
当前位置:首页 > CMS教程 > phpcms

phpcms给text单行文本字段增加是否唯一校验

管理员 2022-08-28
phpcms
732
在给模型增加单文本字段的时候有个选项:值是否唯一

虽然我们设置了,新增保存的时候确实也提示了但是我们没法第一时间知道是不是重复了,并且修改的时候,是不校验的,这就坑了,所以改造了一下,找到
phpcmsmodulescontentfieldstextform.inc.php找到
  1. return '<input type="text" name="info['.$field.']" id="'.$field.'" size="'.$size.'" value="'.$value.'" class="input-text" '.$formattribute.' '.$css.'>'
改成:
  1. $str = '<input type="text" name="info['.$field.']" id="'.$field.'" size="'.$size.'" value="'.$value.'" class="input-text" '.$formattribute.' '.$css.'>'
  2.         if($isunique){ 
  3.             $str = '<input type="text" name="info['.$field.']" id="'.$field.'" size="'.$size.'" value="'.$value.'" onblur="$.get('?m=content&c=content&a=public_check_field&catid='.$this->catid.'&id='.$this->id.'&field='.$field.'&issystem='.$issystem.'&sid='+Math.random()*5, {data:$('#'.$field.'').val()}, function(data){if(data=='1') {$('#'.$field.'').css('background','#fe6b5f');$('#tips_'.$field.'').html('<font color=red>重复了</font>');$(':submit').attr('disabled', true);} else{$('#'.$field.'').css('background','#fff');$('#tips_'.$field.'').html('');$(':submit').attr('disabled', false);}})"  class="input-text" '.$formattribute.' '.$css.'> <span id="tips_'.$field.'"></span>'
  4.         } 
  5.         return $str; 
主要就是增加一行,如果设置了值唯一,则自动触发一个ajax来判断,然后找到:

phpcmsmodulescontentcontent.php最下边新增方法:
  1. /** 
  2.      * 检查字段是否重复 
  3.      */ 
  4.     public function public_check_field() { 
  5.         if($_GET['data']=='' || $_GET['field']=='' || (!$_GET['catid'])) return ''
  6.         $catid = intval($_GET['catid']); 
  7.         $id = intval($_GET['id']); 
  8.         $field = $_GET['field']; 
  9.         $data = $_GET['data']; 
  10.         $issystem = $_GET['issystem']; 
  11.         $modelid = $this->categorys[$catid]['modelid']; 
  12.         $this->db->set_model($modelid); 
  13.         if(!$issystem){ 
  14.             $this->db->table_name = $this->db->table_name . "_data";//引入附表 
  15.         } 
  16.         $sql = "$field = '$data'"
  17.         if(!empty($id)){ 
  18.             $sql .= " AND id <> '$id'"
  19.         } 
  20.         $r = $this->db->get_one($sql); 
  21.         if($r) { 
  22.             exit('1'); 
  23.         } else { 
  24.             exit('0'); 
  25.         } 
  26.     } 

更新缓存,即可正常判断,效果如图:




【缺点】如果设置了多个字段都是设置是否唯一,如果多个字段同时提示“重复了”,当修改第一个字段为正常的时候,这时候按钮可以正常提交了,也就造成后续字段虽然重复了,但是仍然可以提交的问题,所以建议不要设置太多


扫码关注

qrcode

QQ交谈

回顶部