国内流行的内容管理系统(CMS)多端全媒体解决方案 https://www.dedebiz.com
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

258 Zeilen
8.8KB

  1. <?php
  2. /**
  3. *
  4. * 高级搜索
  5. *
  6. * @version $Id: advancedsearch.php 1 15:38 2010年7月8日Z tianya $
  7. * @package DedeCMS.Site
  8. * @copyright Copyright (c) 2020, DedeBIZ.COM
  9. * @license https://www.dedebiz.com/license
  10. * @link https://www.dedebiz.com
  11. */
  12. require_once(dirname(__FILE__)."/../include/common.inc.php");
  13. require_once(DEDEINC."/datalistcp.class.php");
  14. $timestamp = time();
  15. @session_start();
  16. //限制同时搜索数量
  17. $timelock = '../data/time.lock';
  18. if($cfg_allsearch_limit < 1)
  19. {
  20. $cfg_allsearch_limit = 1;
  21. }
  22. if(file_exists($timelock))
  23. {
  24. if($timestamp - filemtime($timelock) < $cfg_allsearch_limit)
  25. {
  26. showmsg('服务器忙,请稍后搜索','-1');
  27. exit();
  28. }
  29. }
  30. @touch($timelock,$timestamp);
  31. $mid = isset($mid) && is_numeric($mid) ? $mid : 0;
  32. $sqlhash = isset($sqlhash) && preg_match("/^[A-Za-z0-9]+$/", $sqlhash) ? $sqlhash : '';
  33. if($mid == 0)
  34. {
  35. showmsg('参数不正确,高级自定义搜索必须指定模型id', 'javascript');
  36. exit();
  37. }
  38. $query = "SELECT maintable, mainfields, addontable, addonfields, template FROM #@__advancedsearch WHERE mid='$mid'";
  39. $searchinfo = $dsql->GetOne($query);
  40. if(!is_array($searchinfo))
  41. {
  42. showmsg('自定义搜索模型不存在','-1');
  43. exit();
  44. }
  45. $template = $searchinfo['template'] != '' ? $searchinfo['template'] : 'advancedsearch.htm';
  46. $sql = empty($_SESSION[$sqlhash])? '' : $_SESSION[$sqlhash];
  47. if(empty($sql))
  48. {
  49. //主表字段处理
  50. $q = stripslashes($q);
  51. $q = preg_replace("#[\|\"\r\n\t%\*\?\(\)\$;,'%<>]#", " ", trim($q));
  52. if( ($cfg_notallowstr!='' && preg_match("#".$cfg_notallowstr."#i", $q)) || ($cfg_replacestr!='' && preg_match("#".$cfg_replacestr."#i", $q)) )
  53. {
  54. echo "你的信息中存在非法内容,被系统禁止!<a href='javascript:history.go(-1)'>[返回]</a>"; exit();
  55. }
  56. $q = addslashes($q);
  57. $iscommend = isset($iscommend) && is_numeric($iscommend) ? $iscommend : 0;
  58. $typeid = isset($typeid) && is_numeric($typeid) ? $typeid : 0;
  59. $typeid = max($typeid, 0);
  60. $includesons = isset($includesons) ? 1 : 0;
  61. $writer = isset($writer) ? trim($writer) : '';
  62. $source = isset($source) ? trim($source) : '';
  63. $startdate = isset($startdate) ? trim($startdate) : '';
  64. $enddate = isset($enddate) ? trim($enddate) : '';
  65. if($startdate != '') $starttime = strtotime($startdate);
  66. else $starttime = 0;
  67. if($enddate != '') $endtime = strtotime($enddate);
  68. else $endtime = 0;
  69. $where = ' WHERE main.arcrank>-1 ';
  70. if($q != '') $where .= " AND main.title LIKE '%$q%' ";
  71. if($iscommend == 1) $where .= " AND FIND_IN_SET('c', main.flag)>0 ";
  72. if(!empty($typeid))
  73. {
  74. if($includesons == 1)
  75. {
  76. $tids = TypeGetSunID($typeid, $dsql, '', $mid, TRUE);
  77. $where .= " AND main.typeid IN ($tids) ";
  78. }
  79. else
  80. {
  81. $where .= " AND main.typeid=$typeid ";
  82. }
  83. }
  84. else
  85. {
  86. $where .= " AND main.channel = $mid ";
  87. }
  88. if($writer != '')
  89. {
  90. $writer = stripslashes($writer);
  91. $writer = preg_replace("#[\|\"\r\n\t%\*\?\(\)\$;,'%<>]#", "", trim($writer));
  92. $writer = addslashes($writer);
  93. $where .= " AND main.writer='$writer' ";
  94. }
  95. if($source != '')
  96. {
  97. $source = stripslashes($source);
  98. $source = preg_replace("#[\|\"\r\n\t%\*\?\(\)\$;,'%<>]#", "", trim($source));
  99. $source = addslashes($source);
  100. $where .= " AND main.source='$source' ";
  101. }
  102. if($starttime > 0) $where .= " AND main.senddate>$starttime ";
  103. if($endtime > 0) $where .= " AND main.senddate<$endtime";
  104. $maintable = $searchinfo['maintable'];
  105. $addontable = $searchinfo['addontable'];
  106. $mainfields = $searchinfo['mainfields'];
  107. $addonfields = $searchinfo['addonfields'];
  108. $mainfieldsarr = explode(',', $mainfields);
  109. $addonfieldsarr = explode(',', $addonfields);
  110. array_pop($addonfieldsarr);//弹出
  111. $intarr = array('int','float');
  112. $textarr = array('textdata','textchar','text','htmltext','multitext');
  113. foreach($addonfieldsarr as $addonfield)
  114. {
  115. $addonfieldarr = explode(':', $addonfield);
  116. $var = $addonfieldarr[0];
  117. $type = $addonfieldarr[1];
  118. if(in_array($type, $intarr))
  119. {
  120. if(isset(${'start'.$var}) && trim(${'start'.$var})!='')
  121. {
  122. ${'start'.$var} = trim(${'start'.$var});
  123. ${'start'.$var} = intval(${'start'.$var});
  124. $where .= " AND addon.$var>${'start'.$var} ";
  125. }
  126. if(isset(${'end'.$var}) && trim(${'end'.$var})!='')
  127. {
  128. ${'end'.$var} = trim(${'end'.$var});
  129. ${'end'.$var} = intval(${'end'.$var});
  130. $where .= " AND addon.$var<${'end'.$var} ";
  131. }
  132. }
  133. elseif(in_array($type, $textarr))
  134. {
  135. if(isset(${$var}) && trim(${$var})!='')
  136. {
  137. ${$var} = stripslashes(${$var});
  138. ${$var} = preg_replace("#[\|\"\r\n\t%\*\?\(\)\$;,'%<>]#", "", trim(${$var}));
  139. ${$var} = addslashes(${$var});
  140. $where .= " AND addon.$var LIKE '%${$var}%'";
  141. }
  142. }
  143. elseif($type == 'select')
  144. {
  145. ${$var} = stripslashes(${$var});
  146. ${$var} = preg_replace("#[\|\"\r\n\t%\*\?\(\)\$;,'%<>]#", "", trim(${$var}));
  147. ${$var} = addslashes(${$var});
  148. if(${$var} != '')
  149. {
  150. $where .= " AND addon.$var LIKE '${$var}'";
  151. }
  152. }
  153. elseif($type == 'radio')
  154. {
  155. ${$var} = stripslashes(${$var});
  156. ${$var} = preg_replace("#[\|\"\r\n\t%\*\?\(\)\$;,'%<>]#", "", trim(${$var}));
  157. ${$var} = addslashes(${$var});
  158. if(${$var} != '')
  159. {
  160. $where .= " AND addon.$var LIKE '${$var}'";
  161. }
  162. }
  163. elseif($type == 'checkbox')
  164. {
  165. if(is_array(${$var}) && !empty(${$var}))
  166. {
  167. foreach(${$var} as $tmpvar)
  168. {
  169. $tmpvar = trim($tmpvar);
  170. if($tmpvar != '')
  171. {
  172. $tmpvar = stripslashes($tmpvar);
  173. $tmpvar = preg_replace("#[\|\"\r\n\t%\*\?\(\)\$;,'%<>]#", "", trim($tmpvar));
  174. $tmpvar = addslashes($tmpvar);
  175. $where .= " AND CONCAT(',',addon.$var, ',') LIKE '%,$tmpvar,%' ";
  176. }
  177. }
  178. }
  179. }
  180. elseif($type == 'datetime')
  181. {
  182. ${'start'.$var} = trim(${'start'.$var});
  183. if(${'start'.$var} != '')
  184. {
  185. ${'start'.$var} = strtotime(${'start'.$var});
  186. }
  187. else
  188. {
  189. ${'start'.$var} = 0;
  190. }
  191. ${'end'.$var} = trim(${'end'.$var});
  192. if(${'end'.$var} != '')
  193. {
  194. ${'end'.$var} = strtotime(${'end'.$var});
  195. }
  196. else
  197. {
  198. ${'end'.$var} = 0;
  199. }
  200. }
  201. }
  202. $orderby = ' order by main.senddate desc ';
  203. if($mid < -1)
  204. {
  205. $where = str_replace('main.', 'addon.', $where);
  206. $orderby = str_replace('main.', 'addon.', $orderby);
  207. $query = "SELECT addon.*, arctype.* FROM $addontable addon
  208. LEFT JOIN #@__arctype arctype ON arctype.id = addon.typeid
  209. $where $orderby";
  210. } else {
  211. $query = "SELECT main.id AS aid,main.*,main.description AS description1, type.*
  212. FROM $maintable main
  213. LEFT JOIN #@__arctype type ON type.id = main.typeid
  214. LEFT JOIN $addontable addon ON addon.aid = main.id
  215. $where $orderby";
  216. }
  217. $sql = $query;
  218. }
  219. else
  220. {
  221. $sql = urldecode($sql);
  222. $query = $sql;
  223. }
  224. $sql = urlencode($sql);
  225. //生成sql的唯一序列化字符串,并将sql语句记录到session中去
  226. $sqlhash = md5($sql);
  227. $_SESSION[$sqlhash] = $sql;
  228. $dlist = new DataListCP();
  229. $dlist->pageSize = 20;
  230. $dlist->SetParameter("hash", $sqlhash);
  231. $dlist->SetParameter("mid", $mid);
  232. if(file_exists(DEDEROOT."/templets/default/$template"))
  233. {
  234. $templatefile = DEDEROOT."/templets/default/$template";
  235. }
  236. else
  237. {
  238. $templatefile = DEDEROOT."/templets/default/advancedsearch.htm";
  239. }
  240. $dlist->SetTemplate($templatefile);
  241. $dlist->SetSource($query);
  242. require_once(DEDEINC."/channelunit.class.php");
  243. //获得一个指定档案的链接
  244. function GetArcUrl($aid,$typeid,$timetag,$title,$ismake=0,$rank=0,$namerule='',$artdir='',$money=0)
  245. {
  246. return GetFileUrl($aid,$typeid,$timetag,$title,$ismake,$rank,$namerule,$artdir,$money);
  247. }
  248. $dlist->Display();