<?php /* * * -+------------------------------------------------------------------------+- * | Author : pkkgu * | Email : [email protected] * | WebSite: http://www.hzapi.com * | Contact: http://t.qq.com/ly0752 * -+------------------------------------------------------------------------+- * | 帝国CMS7.0 搜索API * | 方便第三方程序接入,保留帝国所有帝国CMS的所有功能,仅对搜所结果处理(返回json_encode结果) * -+------------------------------------------------------------------------+- * -+ 不管是否为商业用途,您必须保留此头部信息并不得修改,尊重版权从现在做起 + * */ require("../../class/connect.php"); require("../../class/db_sql.php"); require("../../data/dbcache/class.php"); require("../../class/q_functions.php"); require "../".LoadLang("pub/fun.php"); $editor=1; eCheckCloseMods('search');//关闭模块 $link=db_connect(); $empire=new mysqlquery(); //处理关键字 function SearchDoKeyboardVar($keyboard){ $keyboard=RepPostVar2(trim($keyboard)); $keyboard=str_replace(' ','',$keyboard); return $keyboard; } //返回SQL function SearchDoKeyboard($f,$hh,$keyboard){ $where=''; $keyboard=SearchDoKeyboardVar($keyboard); if(empty($keyboard)) { return ""; } if(!empty($hh)) { if($hh=='LT')//小于 { $where=$f."<'".$keyboard."'"; } elseif($hh=='GT')//大于 { $where=$f.">'".$keyboard."'"; } elseif($hh=='EQ')//等于 { $where=$f."='".$keyboard."'"; } elseif($hh=='LE')//小于等于 { $where=$f."<='".$keyboard."'"; } elseif($hh=='GE')//大于等于 { $where=$f.">='".$keyboard."'"; } elseif($hh=='NE')//不等于 { $where=$f."<>'".$keyboard."'"; } elseif($hh=='IN')//包含 { $kr=explode(' ',$keyboard); $kcount=count($kr); $kbs=''; $dh=''; for($i=0;$i<$kcount;$i++) { if(empty($kr[$i])) { continue; } if($kbs) { $dh=','; } $kbs.=$dh."'".$kr[$i]."'"; } if($kbs) { $where=$f." IN (".$kbs.")"; } else { return ''; } } elseif($hh=='BT')//范围 { $keyboard=ltrim($keyboard); if(!strstr($keyboard,' ')) { return ''; } $kr=explode(' ',$keyboard); if(!trim($kr[0])||!trim($kr[1])) { return ''; } $where=$f." BETWEEN '".$kr[0]."' and '".$kr[1]."'"; } else//相似 { $where=$f." LIKE '%".str_replace(" ","%",$keyboard)."%'"; } } else { $where=$f." LIKE '%".str_replace(" ","%",$keyboard)."%'"; } return $where; } //前台分页 function wexin_page1($num,$line,$page_line,$start,$page,$search){ global $fun_r; if($num<=$line) { return ''; } $weixin_page=array(); $search=RepPostStr($search,1); $url=eReturnSelfPage(0).'?page'; $snum=2;//最小页数 $totalpage=ceil($num/$line);//取得总页数 $firststr='<a title="'.$fun_r['trecord'].'"> <b>'.$num.'</b> </a> '; $weixin_page['trecord']=$num; //取得总页数 $weixin_page['toppage']=0; //取得首页 //上一页 if($page<>0) { $toppage='<a href="'.$url.'=0'.$search.'">'.$fun_r['startpage'].'</a> '; $pagepr=$page-1; $weixin_page['prepage']=$pagepr; //上一页 $prepage='<a href="'.$url.'='.$pagepr.$search.'">'.$fun_r['pripage'].'</a>'; } //下一页 if($page!=$totalpage-1) { $pagenex=$page+1; $weixin_page['nextpage']=$pagenex; //下一页 $nextpage=' <a href="'.$url.'='.$pagenex.$search.'">'.$fun_r['nextpage'].'</a>'; $lastpage=' <a href="'.$url.'='.($totalpage-1).$search.'">'.$fun_r['lastpage'].'</a>'; } $weixin_page['lastpage']=$totalpage-1; //取得首页 $starti=$page-$snum<0?0:$page-$snum; $no=0; $weixin_page_num=array(); for($i=$starti;$i<$totalpage&&$no<$page_line;$i++) { $no++; if($page==$i) { $is_1="<b>"; $is_2="</b>"; } else { $is_1='<a href="'.$url.'='.$i.$search.'">'; $is_2="</a>"; } $pagenum=$i+1; $returnstr.=" ".$is_1.$pagenum.$is_2; $weixin_page_num[]=$pagenum; //分页 } $returnstr=$firststr.$toppage.$prepage.$returnstr.$nextpage.$lastpage; $weixin_page['pagenum']=$weixin_page_num; //当前分页 $weixin_page['currentpage']=$page; //取得首页 //return $returnstr; return $weixin_page; } //错误提示 function printerror_weixin($error="",$gotourl="",$ecms=0,$noautourl=0,$novar=0){ global $empire,$editor,$public_r,$ecms_config; if($editor==1){$a="../";} elseif($editor==2){$a="../../";} elseif($editor==3){$a="../../../";} else{$a="";} if($ecms==1||$ecms==9) { $a=ECMS_PATH.'e/data/'; } if(empty($error)) {$error="DbError";} @include $a.LoadLang("pub/q_message.php"); $error=empty($novar)?$qmessage_r[$error]:$error; $ret=array(); $ret['schinfo']=array( 'error'=>1, 'message'=>$error, ); echo str_replace('\\/', '/', json_encode($ret)); db_close(); $empire=null; exit(); } //变量 if($_GET['searchget']==1){ $_POST=$_GET; } $ip=egetip(); $searchtime=time(); $getvar=$_POST['getvar']; if(empty($getvar)) { $getfrom="history.go(-1)"; $dogetvar=''; } else { } //返回 //$getfrom=DoingReturnUrl($getfrom,$_POST['ecmsfrom']); //搜索用户组 if($public_r['searchgroupid']) { $psearchgroupid=$public_r['searchgroupid']; @include("../data/dbcache/MemberLevel.php"); $searchgroupid=(int)getcvar('mlgroupid'); if($level_r[$searchgroupid][level]<$level_r[$psearchgroupid][level]) { printerror_weixin("NotLevelToSearch",$getfrom,1); } } //搜索间隔 $lastsearchtime=getcvar('lastsearchtime'); if($lastsearchtime) { if($searchtime-$lastsearchtime<$public_r[searchtime]) { printerror_weixin("SearchOutTime",$getfrom,1); } } //搜索字段 $searchclass=$_POST['show']; if(empty($searchclass)||strstr($searchclass," ")) { printerror_weixin("SearchNotRecord",$getfrom,1); } //时间范围 $add=''; $addtime=''; $starttime=RepPostVar($_POST['starttime']); if(empty($starttime)) { $starttime="0000-00-00"; } $endtime=RepPostVar($_POST['endtime']); if(empty($endtime)) { $endtime="0000-00-00"; } if($endtime!="0000-00-00") { $addtime=" and (newstime BETWEEN '".to_time($starttime." 00:00:00")."' and '".to_time($endtime." 23:59:59")."')"; } //价格 $addprice=''; $startprice=(int)$_POST['startprice']; $endprice=(int)$_POST['endprice']; if($endprice) { $addprice=" and (price BETWEEN ".$startprice." and ".$endprice.")"; } //搜索栏目及表 $classid=RepPostVar($_POST['classid']); $s_tbname=RepPostVar($_POST['tbname']); $s_tempid=(int)$_POST['tempid']; $trueclassid=0; if($classid)//按栏目 { if(strstr($classid,","))//多栏目 { $son_r=sys_ReturnMoreClass($classid,1); $trueclassid=$son_r[0]; $add.=' and ('.$son_r[1].')'; } else { $trueclassid=intval($classid); $add.=$class_r[$trueclassid][islast]?" and classid='$trueclassid'":" and ".ReturnClass($class_r[$trueclassid][sonclass]); } $tbname=$class_r[$trueclassid][tbname]; $modid=$class_r[$trueclassid][modid]; } elseif($s_tbname)//按数据表 { $tbnamenum=$empire->gettotal("select count(*) as total from {$dbtbpre}enewstable where tbname='$s_tbname' limit 1"); if(!$tbnamenum) { printerror_weixin("SearchNotRecord",$getfrom,1); } $tbname=$s_tbname; //模型id $thestemp_r=$empire->fetch1("select modid from ".GetTemptb("enewssearchtemp")." where tempid='$s_tempid'"); if(empty($thestemp_r['modid'])) { printerror_weixin("SearchNotRecord",$getfrom,1); } $modid=$thestemp_r['modid']; } else { $tbname=$public_r['tbname']; $modid=0; } //表不存在 if(empty($tbname)||InfoIsInTable($tbname)) { printerror_weixin("SearchNotRecord",$getfrom,1); } //标题分类 $ttid=RepPostVar($_POST['ttid']); $truettid=0; if($ttid) { if(strstr($ttid,","))//多标题分类 { $son_r=sys_ReturnMoreTT($ttid); $truettid=$son_r[0]; $add.=' and ('.$son_r[1].')'; } else { $truettid=intval($ttid); $add.=" and ttid='$truettid'"; } } //会员 $member=$_POST['member']; if($member==1) { $add.=' and ismember=1'; } elseif($member==2) { $add.=' and ismember=0'; } //模型 $tempr=array(); if(empty($class_r[$trueclassid][searchtempid])) { if(empty($modid)) { $tempr=$empire->fetch1("select modid from ".GetTemptb("enewssearchtemp")." where isdefault=1 limit 1"); } else { $tempr[modid]=$modid; } } else { $tempr[modid]=$modid; } //关键字 $keyboard=$_POST['keyboard']; $keyboardone=0; if(is_array($keyboard)) {} elseif(strstr($keyboard,',')) { $keyboard=explode(',',$keyboard); } else { $keyboard=trim($keyboard); $len=strlen($keyboard); if($len<$public_r[min_keyboard]||$len>$public_r[max_keyboard]) { printerror_weixin("MinKeyboard",$getfrom,1); } $keyboardone=1; } //符号 $hh=$_POST['hh']; $hhone=0; if(is_array($hh)) {} elseif(strstr($hh,',')) { $hh=explode(',',$hh); } else { $hhone=1; } //字段 if(!is_array($searchclass)) { $searchclass=explode(',',$searchclass); } $andor=$_POST['andor']; $andor=$andor=='and'?'and':'or'; $mr=$empire->fetch1("select searchvar,tbname from {$dbtbpre}enewsmod where mid='$tempr[modid]'"); if(!strstr($mr[searchvar],",price,"))//是否包含价格 { $addprice=""; $startprice=0; $endprice=0; } //搜索特殊字段 $mr[searchvar].='id,keyboard,userid,username,'; $where=''; $newsearchclass=''; $count=count($searchclass); for($i=0;$i<$count;$i++) { if(empty($searchclass[$i])) { continue; } $searchclass[$i]=str_replace(',','',$searchclass[$i]); if(!strstr($mr[searchvar],",".$searchclass[$i].",")) { continue; } $searchclass[$i]=RepPostVar($searchclass[$i]); $dh=empty($newsearchclass)?'':','; $newsearchclass.=$dh.$searchclass[$i]; $dohh=$hhone==1?$hh:$hh[$i]; $dokeyboard=$keyboardone==1?$keyboard:$keyboard[$i]; $onewhere=SearchDoKeyboard($searchclass[$i],$dohh,$dokeyboard); if($onewhere) { $or=empty($where)?'':' '.$andor.' '; $where.=$or.'('.$onewhere.')'; } } //参数错 if(empty($newsearchclass)) { printerror_weixin("SearchNotRecord",$getfrom,1); } if($where) { $add.=' and ('.$where.')'; } $allwhere=$add.$addtime.$addprice; $keyboard=$keyboardone==1?SearchDoKeyboardVar($keyboard):''; $andsql=addslashes($allwhere); if(strlen($newsearchclass)>250||strlen($classid)>200||strlen($andsql)>3000||strlen($keyboard)>100||strlen($ttid)>200) { printerror_weixin("SearchNotRecord",$getfrom,1); } //验证码 $checkpass=md5($allwhere.$tbname); $query="select count(*) as total from {$dbtbpre}ecms_".$tbname.($allwhere?' where '.substr($allwhere,5):''); $search_r=$empire->fetch1("select searchid from {$dbtbpre}enewssearch where checkpass='$checkpass' limit 1"); $searchid=$search_r[searchid]; //排序 $orderby=RepPostVar($_POST['orderby']); $myorder=(int)$_POST['myorder']; if($orderby) { $orderr=ReturnDoOrderF($tempr[modid],$orderby,$myorder); $orderby=$orderr['returnf']; } else { $orderby='newstime'; } //是否有历史记录 if($searchid) { $search_num=$empire->gettotal($query); $sql=$empire->query("update {$dbtbpre}enewssearch set searchtime='$searchtime',result_num='$search_num',onclick=onclick+1,orderby='$orderby',myorder='$myorder',tempid='$s_tempid' where searchid='$searchid'"); if(empty($search_num)) { $searchid=0; } } else { $search_num=$empire->gettotal($query); if(empty($search_num)) { $searchid=0; } else { $iskey=$keyboardone==1?0:1; $sql=$empire->query("insert into {$dbtbpre}enewssearch(searchtime,keyboard,searchclass,result_num,searchip,classid,onclick,orderby,myorder,checkpass,tbname,tempid,iskey,andsql,trueclassid) values('$searchtime','$keyboard','$newsearchclass','$search_num','$ip','$classid',1,'$orderby','$myorder','$checkpass','$tbname','$s_tempid','$iskey','$andsql','$trueclassid')"); $searchid=$empire->lastid(); } } if(empty($searchid)) { printerror_weixin("SearchNotRecord",$getfrom,1); } $search_r=$empire->fetch1("select searchid,keyboard,result_num,orderby,myorder,tbname,tempid,andsql,trueclassid from {$dbtbpre}enewssearch where searchid='$searchid'"); if(empty($search_r['searchid'])||InfoIsInTable($search_r[tbname])) { printerror_weixin("SearchNotRecord",$getfrom,1); } $page=(int)$_GET['page']; $page=RepPIntvar($page); $start=0; $page_line=$public_r['search_pagenum'];//每页显示链接数 //$line=$public_r['search_num']; $line=5;//每页显示记录数 $offset=$page*$line;//总偏移量 $search="&searchid=".$searchid; $myorder=$search_r[orderby]; if(empty($search_r[myorder])) { $myorder.=" desc"; } $add=stripSlashes($search_r['andsql']); $num=$search_r[result_num]; $query="select * from {$dbtbpre}ecms_".$search_r[tbname].($add?' where '.substr($add,5):''); $query.=" order by ".$myorder." limit $offset,$line"; $sql=$empire->query($query); //$listpage=page1($num,$line,$page_line,$start,$page,$search); $search_r[keyboard]=ehtmlspecialchars($search_r[keyboard]); //字段 $ret=array(); $ret['schinfo']=array( 'error'=>0, 'keyboard'=>$search_r[keyboard] ); $ret['page']=wexin_page1($num,$line,$page_line,$start,$page,$search); $ret['content']=array(); $bqno=0; //'searchvar'=>',title,smalltext,', while($r=$empire->fetch($sql)) { $bqno++; $searchvar = substr($emod_r[$tempr['modid']]['searchvar'],1,strlen($emod_r[$tempr['modid']]['searchvar'])-2);// 楼前搜所字短 $tbmainf = substr($emod_r[$tempr['modid']]['tbmainf'],0,strlen($emod_r[$tempr['modid']]['tbmainf'])-1); //系统字段 $searchvar=$searchvar.$tbmainf; if($searchvar){ $searchvar_arr=explode(',',$searchvar); for($i=0;$i<count($searchvar_arr);$i++){ $ret['content'][$bqno][$searchvar_arr[$i]]=$r[$searchvar_arr[$i]]; } } $ret['content'][$bqno]['classurl']=sys_ReturnBqClassname($r,9); $ret['content'][$bqno]['classname']=$class_r[$r[classid]][bname]?$class_r[$r[classid]][bname]:$class_r[$r[classid]][classname]; $ret['content'][$bqno]['titleurl']=sys_ReturnBqTitleLink($r);//链接 $ret['content'][$bqno]['newstime']=format_datetime($r['newstime'],"Y-m-d H:i:s"); $no++; } db_close(); $empire=null; echo str_replace('\\/', '/', json_encode($ret)); /* Array ( [schinfo] => Array ( [error] => 0 [keyboard] => 中国 ) [page] => Array ( [trecord] => 27 [toppage] => 0 [nextpage] => 1 [lastpage] => 5 [pagenum] => Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 ) [currentpage] => 0 ) [content] => Array ( [1] => Array ( [title] => 中国中国中国中国中国中国中国中国中国kkkk [smalltext] => 中国中国中国中国中国中国中国中国中国 [titlepic] => [newstime] => 2013-10-18 10:40:00 [ftitle] => [diggtop] => 0 [classurl] => /e/action/ListInfo/?classid=1 [classname] => test [titleurl] => /e/action/ShowInfo.php?classid=1&id=29 ) [2] => Array ( [title] => 中国中国中国中国中国中国中国中国中国kkkk [smalltext] => 中国中国中国中国中国中国中国中国中国 [titlepic] => [newstime] => 2013-10-18 10:40:00 [ftitle] => [diggtop] => 0 [classurl] => /e/action/ListInfo/?classid=1 [classname] => test [titleurl] => /e/action/ShowInfo.php?classid=1&id=28 ) [3] => Array ( [title] => 中国中国中国中国中国中国中国中国中国kkkk [smalltext] => 中国中国中国中国中国中国中国中国中国 [titlepic] => [newstime] => 2013-10-18 10:40:00 [ftitle] => [diggtop] => 0 [classurl] => /e/action/ListInfo/?classid=1 [classname] => test [titleurl] => /e/action/ShowInfo.php?classid=1&id=27 ) [4] => Array ( [title] => 中国中国中国中国中国中国中国中国中国kkkk [smalltext] => 中国中国中国中国中国中国中国中国中国 [titlepic] => [newstime] => 2013-10-18 10:40:00 [ftitle] => [diggtop] => 0 [classurl] => /e/action/ListInfo/?classid=1 [classname] => test [titleurl] => /e/action/ShowInfo.php?classid=1&id=26 ) [5] => Array ( [title] => 中国中国中国中国中国中国中国中国中国kkkk [smalltext] => 中国中国中国中国中国中国中国中国中国 [titlepic] => [newstime] => 2013-10-18 10:40:00 [ftitle] => [diggtop] => 0 [classurl] => /e/action/ListInfo/?classid=1 [classname] => test [titleurl] => /e/action/ShowInfo.php?classid=1&id=25 ) ) ) */ ?>