分页类的修改

这两天看了不少牛人的东西关于PHP的安全和漏洞。

自己就把以前用到的类给在做修改了下。

<?
//别相信一切输进来的,都要判断下。是不是真的。
function getpage($sql,$page_size=20)//每页20和传过来的sql
 {
      global $page,$totalpage,$sums;  //out param
      $page = intval(addslashes($_GET["page"]));//传参数。
   //自己过滤下
   //判断是不是数字
   if(!is_numeric($page)){
             echo "<scrīpt>alert('输入的不是数字');history.back();</scrīpt>";
    exit;
   }
   //过滤。。
   if(eregi("select|insert|update|delete|/'|///*|/*|/././/|/.//|union|into|load_file|outfile|for|while|when", $page)){
    echo "<scrīpt>alert('注意:输入有非法字符');history.back();</scrīpt>";
    exit;
   }
   //过滤:
   $name_key = array("//",'&',' ',"'",'"','/','*',',','<','>',"/r","/t","/n",'#','$','(',')','%','+','?',';','^');
   foreach($name_key as $value){
   if (strpos($page,$value) !== false){
    echo "<scrīpt>alert('输入非法或被屏蔽');history.go(-1);</scrīpt>";
    exit;
   }
   }
      $pagesql = strstr($sql," from ");//找到第一个FROM的。
      $pagesql = "select count(*) as ids ".$pagesql;//查询sql
      $result = @mysql_query($pagesql);
      if($rs = mysql_fetch_array($result)) $sums = $rs[0];//得到总数
      $totalpage = ceil($sums/$page_size);//有小数就进一位。
      if((!$page)||($page<1)) $page=1;//判断是不是有第一页。
      $startpos = ($page-1)*$page_size; //计算起点。
      $sql .=" limit $startpos,$page_size ";//限制起点并要求一页20
      return $sql;
 }
function showbar($string="")
{    
    global $page,$totalpage;
 //对参数进行过滤。
 $string=addslashes($string);
 //过滤下
 //过滤。。
 if(eregi("select|insert|update|delete|/'|///*|/*|/././/|/.//|union|into|load_file|outfile|for|while|when", $string)){
    echo "<scrīpt>alert('注意:输入有非法字符');history.back();</scrīpt>";
    exit;
 }
 //过滤:
 $name_key = array("//",'&',' ',"'",'"','/','*',',','<','>',"/r","/t","/n",'#','$','(',')','%','+','?',';','^');
 foreach($name_key as $value){
   if (strpos($string,$value) !== false){
    echo "<scrīpt>alert('输入非法或被屏蔽');history.go(-1);</scrīpt>";
    exit;
   }
 }
 $out="共<font color='red'><b>".$totalpage."</b></font>页&nbsp;&nbsp;";
    $linkNum =4;
    $start = ($page-round($linkNum/2))>0 ? ($page-round($linkNum/2)) : "1";
    $end   = ($page+round($linkNum/2))<$totalpage ? ($page+round($linkNum/2)) : $totalpage;
    $prestart=$start-1;
    $nextend=$end+1;
    if($page<>1)
 $out .= "<a href='?page=1&&".$string."'title=第一页>第一页</a>&nbsp;";
    if($start>1)
 $out.="<a href='?page=".$prestart."&&".$string."' title=上一页>..<<</a>&nbsp;";
 $t='';//初始化。
 for($t=$start;$t<=$end;$t++)
    {
     $out .= ($page==$t) ? "<font color='red'><b>[".$t."]</b></font>&nbsp;" : "<a href='?page=$t&&".$string."'>$t</a>&nbsp;";
    }
 if($end<$totalpage)
 $out.="<a href='?page=".$nextend."&&".$string."' title=下一页>>>..</a>";
    if($page<>$totalpage)
   $out .= "&nbsp;<a href='?page=".$totalpage."&&".$string."' title=最后页>最后页</a>";
   return $out;
}
?>

<?
//####################################################
//连接数据库类和分页类。
$query="select * from 表 ORDER BY newsId DESC";
$result=getpage($query);//调用的。
$result=$db->command($result);
$total=$db->num_rows($result);
//在在下面显示
//当有参数。将参数放在showbar()这里面。
?>
<? echo showbar();?>
<?
//下面是个搜索条,就是分页查询。即有参数的。。。
##############################################
?>
<form action="你设定.php" name="sousuo" method="get">
<input type="hidden" name="action" value="listdomain" />
<table width="95%" align="center" class="leftmenu">
<tr><td width="60%">帐号:<input name="userno" type="text" id="userno" size="10" maxlength="30" /> </td>
<td width="40%"><input type="submit" name="Submit3" value="查询" />
<input type="reset" name="Submit2" value="重置" /></td></tr></table>
</form>
<?
//在这个里面FORM标签里METHOD尽量设成GET形式。
//得到参数。
$userno=trim($_GET['userno']);//这个地方需要你去过滤。
if($userno!=NULL){
$where = "and agentName like '".$userno."%'";
$query="select * from 表 level<>0"." ".$where." order by addTime desc";
$result=getpage($query);
$result=$db->command($result);
}
?>
<?
echo showbar("userno={$userno}");//这个地方的参数userno将------$userno=trim($_GET['userno']);//这个地方需要你去过滤。
?>

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值