+ -
当前位置:首页 → 问答吧 → PHP常用类(已经更新文件上传类.MySql类和常用的账号登录类,常用函数类)[连载中...]

PHP常用类(已经更新文件上传类.MySql类和常用的账号登录类,常用函数类)[连载中...]

时间:2009-04-04

来源:互联网

Mysql类,已经有详解注释,我就不说了.

[php]<?php
/**
  * 一下午弄出来,自动载入mysql连接,并带了insert,select into功能,自能转换sql语句,已经测试.
*QQ:50291532 本人是学了asp之后在来学php的,看了很多例子都是面向过程的方式,感觉和asp没啥两样
*php要能跟.net java竞争,必须面向对象.以前那种面向过程的方式迟早被淘汰,
*php的强大功能就在于array和function.
 *如果你能在把面向对象运行的熟练,我相信,不久将是一名月收入过8000的程序员
*delete我就不写了,相信大家都会吧.尽管不要用delete可以将一个字段值改成别的值,这样会好点.防止误操作
*类连载中.希望版本加分.后面将写出一些常用的类.
*/

    class MySql{
        protected $host,$userid,$userpass,$table,$ut,$link;
        function __construct($host='localhost',$userid='root',$userpass='',$table='zl8522115',$ut='bg2312'){
            $this->host=$host;
            $this->userid=$userid;
            $this->userpass=$userpass;
            $this->table=$table;
            $this->ut=$ut;
            $this->connect();
        }
        /**
         * 数据库连接方法,由类自动载入
         */
        protected function connect(){
            $this->link=mysql_connect($this->host,$this->userid,$this->userpass) or die ("数据加连接失败");
            if($this->table!=""){
                mysql_select_db("$this->table",$this->link) or die ("数据库表连接失败");
            }
            mysql_query("SET NAMES '$this->ut'");
        }
        /**
         * 数据库查询语句.
         * 其中$row为数组,如果全部列直接带入*就可以了,程序会自动判断的
         * $row为查询的列,$table为查询的表,$conditions为条件,$compositor为排序方式
         * 返回值为数据库查询出来的数组
         */
        function mysql_select($row,$table,$conditions='',$compositor=''){
            if(is_array($row))    $row=implode(',',$row);
            $sql="select $row from $table";
            if($conditions!=''){
                $sql.=" where $conditions";
            }
            if($compositor!=''){
                $sql.=" order by ".$compositor;
            }
            $query=mysql_query($sql) or die ("select error");
//            $query=mysql_fetch_object($query);     如果在这里返回的话,外面将不好输出.
            return $query;
        }
        /**
         * 数据库插入语句.$table为表名,$keyvalue为带key的数组,数组的key为字段,数组的value为插入的值
         * 函数自动为插入字符串值加上单引号
         */
        function mysql_insert($table,$keyvalue){
            $key=implode(',',array_keys($keyvalue));
            foreach($keyvalue as $tempkey=>$val){
                if(is_string($val))$keyvalue[$tempkey]="'$val'";
            }
            $value=implode(',',$keyvalue);
            $sql="insert into $table ($key) values ($value)";
            mysql_query($sql) or die ("insert error");
        }
        /**
         * 数据库更新语句$table为数据库$keyvalue为带key的数组,$conditions为where语句
    *$keyvalue说明:数组的key为字段,数组的value为更新的值
         */
        function mysql_update($table,$keyvalue,$conditions=''){
            foreach($keyvalue as $key=>$value){
                if(is_string($value))$keyvalue[$key]="'$value'";
            }
            foreach($keyvalue as $key=>$value){
                $update.="$key=$value,";
            }
            if(substr($update,-1)==",") $update=substr($update,0,strlen($update)-1);
            $sql="update $table set $update";
            if($conditions!="") $sql.=" where $conditions";
            mysql_query($sql) or die ("update error");
        }
        function __destruct(){
//            echo "connclose";
            mysql_close($this->link);
        }

    }

    $conn=new MySql;
    $query=$conn->mysql_select('*','zlskyadmin','1=1','id asc');
    /**
     * 这里用array或者object都随便.不过array返回字段和偏移量,返回的太多了,object就只返回字段
     */
    while($row=mysql_fetch_object($query)){
        echo $row->id."--".$row->username."--".$row->password."<br>";
    }
    $admin=array('id'=>2,'username'=>'zlsky',password=>'zlsky');
    $conn->mysql_insert('zlskyadmin',$admin);
    $conn->mysql_update('zlskyadmin',$admin,"id=2");
?>
[/php]

常用的账号登录类.一晚上弄出来的,希望版主加分
这个类是继承了MySql类的,大家注意了
[php]
<?php
    /**
     * 验证账号登入类,私有变量$user为账号,$pass为密码,$image,$image2为图片验证码的表单值和图片生成的session值
     * 账号以(字母开头,允许5-16字节,允许字母数字下划线)验证才可以通过.
     * 密码以(由数字、26个英文字母或者下划线组成的字符串)验证才可以通过.可以自行更改正则
     * $row数组为数据库字段
     * ★★★注:$row个地方有点小BUG,只能选出账号列和密码列,不然程序判断会有一点小问题的.并且账号列要在前面,密码列要在后面★★★
     * ★★★暂时还想不出什么办法.只能等高手指点了.不过一般只验证账号和密码应该是没什么问题.密码由MD5加密★★★
     * $table为表名,$conditions为where条件
     * $url为验证通过之后将跳转到什么页面
     * 类为全自动验证.如果验证码错误,账号输入非法,或者是与数据库密码不对都将跳到前一页.
     * 正确将跳转到指定$url页面(注:如果要跳到本面,就填写本页面的地址);
     */
    class AccountCheck extends MySql{
        private $user,$pass,$image,$image2,$row,$table,$conditions,$url;
        function __construct($user,$pass,$image='',$image2='',$row,$table,$conditions='',$url){
            parent::__construct();
            $this->user=trim($user);
            $this->pass=trim($pass);
            $this->image=trim($image);
            $this->image2=$image2;
            $this->row=$row;
            $this->table=$table;
            $this->conditions=$conditions;
            $this->url=$url;
            $this->check();
        }
        /**
         * 自动加载函数,检测账号名,密码以及验证码是否正确
         */
        function check(){
            if($this->image!=$this->image2){
                alert_msg("您输入的验证码有误!",1);
            }
            if(preg_match("/^[a-zA-Z][a-zA-Z0-9_]{4,15}$/",$this->user) && preg_match("/^\w+$/",$this->pass)){
                $this->checksql($this->row,$this->table,$this->conditions);
            }else{
                alert_msg("您输入的账号和密码有非法字符!",1);
            }
        }
        /**
         * 自动载入函数,检测与数据库里面字段值是否匹配.
         */
        function checksql($row,$table,$conditions=''){
            $checkrow=$row;
            $row=implode(',',$row);
            $sql="select $row from $table";
            if($conditions!=''){
                $sql.=" where $conditions";
            }
            $query=mysql_query($sql) or die ("select error");
            $query=mysql_fetch_row($query);
            if($query[0]==$this->user && $query[1]==md5($this->pass)){
                alert_msg(false,$this->url);
            }else{
//                echo $this->user."<br>".md5($this->pass)."<br>".$query[0]."<br>".$query[1];
                alert_msg("您输入的账号或者是密码错误",1);
            }
        }
    }
/**
* 这里测试,定义两个字段.一定要这样,一个用户名,一个密码,不然会出问题的哟
*/
$conditions=array('username','password');
$check=new AccountCheck('admin','admin','123','123',$conditions,'zlskyadmin','id=1','function.php');



?>
[/php]

这个里面有用到一个跳转页面的函数,我加上来
[php]
<?php
/*
* 功能:综合提示JS代码输出
* 参数 $msg 为提示信息,如果等于空将不弹出提示框
*      $direct 为提示类型 0为提示(默认)1为提示刷新返回 2为提示返回
* 输出提示代码并结束程序
*/
function alert_msg($msg=false,$direct = "0"){
   switch($direct){
    case '0'://提示
     $script = "";
    case '1'://提示刷新返回
     $script = "location.href=\"".$_SERVER["HTTP_REFERER"]."\";";
     break;
    case '2'://提示返回
     $script = "history.back();";
     break;
    default://提示转向指定页面
     $script = "location.href=\"".$direct."\";";
   }
   if($msg==false){
    echo "<script language='javascript'>".$script."</script>";
   }else{
    echo "<script language='javascript'>window.alert('".$msg."');".$script."</script>";
   }
   exit;
}

?>
[/php]

稍后我将在写几个,如果有问题或者是不理解的欢迎提问.本人可是为了1W/月的工资努力拼的
学了一个月了.呵呵.欢迎面向对象的高手指点小弟.
不过这几个基本上都够用了,但是还有分页之类的.我喜欢自己写,我会加上详细的注释,希望大家能喜欢,看懂.
二楼为常用函数.大家可能会有点用处.
[ 此帖被zl8522115在2009-04-27 20:12重新编辑 ]

作者: zl8522115   发布时间: 2009-04-04

今天贴一些常用的函数类,这些都是在网上收集的,可能对大家编程有点用.这个函数类可以被一些自己写的类继承,这样用起来就会方便和效率了
[php]
class useful{
/*
* 常用函数类
* 作    者:多菜鸟
* 联系邮箱:kingerq AT msn DOT com
* 创建时间:2005-07-18
* 来源:http://blog.csdn.net/kingerq
*/

/*
* 功能:格式化数字,以标准MONEY格式输出
*/

function formatnumber($num){
   return number_format($num, 2, ".", ",");
}

/*
* 功能:格式化文本,将\n转成<br>等
* 参数:$string 来源字符串
* 返回:处理后的字符串
*/
function formatstring($string = ""){
   $string = preg_replace(array("/ /", "/ /"), array(" ", "  "), $string);
   return nl2br($string);
}

/*
* 功能:格式化文本输出
* 参数 $text 为需格式化的文本内容
*/
function formatcontent($text){
   $trans = get_html_translation_table(HTML_SPECIALCHARS);
   $trans = array_flip($trans);
   $text = strtr($text, $trans);
   //$text = str_replace("\n", "<br>", $text);
   //$text = str_replace(" ", " ", $text);
   return $text;
}

/*
* 将字节转换成Kb或者Mb...
* 参数 $num为字节大小
*/
function bitsize($num){
   if(!preg_match("/^[0-9]+$/", $num)) return 0;
   $type = array( "B", "KB", "MB", "GB", "TB", "PB" );

   $j = 0;
   while( $num >= 1024 ) {
    if( $j >= 5 ) return $num.$type[$j];
    $num = $num / 1024;
    $j++;
   }
   return $num.$type[$j];
}

/*
* 功能:不足3的倍数位的数字,用0补足
* $num 需补充的数字
* 返回补充完整的数字串
*/
function prefix($num){
   if( strlen( $num ) % 3 == 0 ) {
    return $this->prefix("0".$num);
   }
   return $num;
}

/*
* 功能:连续建目录
* $dir 目录字符串
*/
function makedir( $dir, $mode = "0777" ) {
   if( ! $dir ) return 0;
   $dir = str_replace( "\\", "/", $dir );

   $mdir = "";
   foreach( explode( "/", $dir ) as $val ) {
    $mdir .= $val."/";
    if( $val == ".." || $val == "." ) continue;

    if( ! file_exists( $mdir ) ) {
     if(!@mkdir( $mdir, $mode )){
      echo "创建目录 [".$mdir."]失败.";
      exit;
     }
    }
   }
   return true;
}

/*
* 功能:检测时间的正确性
* $date 为时间,例:YYYY-MM-DD
* 返回:通过返回true,反之返回false
*/
function chkdate( $date ) {
   $d = explode( "-", $date );
   if( checkdate( $d[1], $d[2], $d[0] ) ) {
    return true;
   }else {
    return false;
   }
}

/*
* 防注入处理(为变量加入斜杠)函数
* 参数 $array 为防注入变量数组
*/
function add_s(&$array){
   foreach($array as $key=>$value){
    if(!is_array($value)){
     $array[$key]=addslashes($value);
    }else{
     $this->add_s($array[$key]);
    }
   }
}

/*
* 转换HTML特殊字符(表单提交的时候使用,防止恶意JS代码)
* 参数 $array 为需转换的字符串或者数组
*/
function specialhtml(&$array){
   if(is_array($array)){//数组处理
    foreach($array as $key=>$value){
     if(!is_array($value)){
      $array[$key]=htmlspecialchars($value);
     }else{
      $this->specialhtml($array[$key]);
     }
    }
   }else{
    $array = htmlspecialchars($array);
   }
}

/*
* 可以避免乱码的截取汉字
* 参数 $str 为字符串,$start 为开始字符,$len 结束字符
* 返回截取后的字符
*/
function msubstr($str, $start, $len) {
   $tmpstr = "";
   $strlen = $start + $len;
   for($i = 0; $i < $strlen; $i++) {
    if(ord(substr($str, $i, 1)) > 0xa0) {
     $tmpstr .= substr($str, $i, 2);
     $i++;
    } else
     $tmpstr .= substr($str, $i, 1);
   }
   return $tmpstr;
}


/*
* 功能:综合提示JS代码输出
* 参数 $msg 为提示信息,如果等于空将不弹出提示框
*      $direct 为提示类型 0为提示(默认)1为提示刷新返回 2为提示返回
* 输出提示代码并结束程序
*/
function alert_msg($msg=false,$direct = "0"){
   switch($direct){
    case '0'://提示
     $script = "";
    case '1'://提示刷新返回
     $script = "location.href=\"".$_SERVER["HTTP_REFERER"]."\";";
     break;
    case '2'://提示返回
     $script = "history.back();";
     break;
    default://提示转向指定页面
     $script = "location.href=\"".$direct."\";";
   }
   if($msg==false){
       echo "<script language='javascript'>".$script."</script>";
   }else{
    echo "<script language='javascript'>window.alert('".$msg."');".$script."</script>";
   }
   exit;
}


/*
* 功能:取得给定日期所在周的开始日期和结束日期
* 参数:$gdate 日期,默认为当天,格式:YYYY-MM-DD
*       $first 一周以星期一还是星期天开始,0为星期天,1为星期一
* 返回:数组array("开始日期", "结束日期");
*/
function aweek($gdate = "", $first = 0){
if(!$gdate) $gdate = date("Y-m-d");
$w = date("w", strtotime($gdate));//取得一周的第几天,星期天开始0-6
$dn = $w ? $w - $first : 6;//要减去的天数
$st = date("Y-m-d", strtotime("$gdate -".$dn." days"));
$en = date("Y-m-d", strtotime("$st +6 days"));
return array($st, $en);//返回开始和结束日期
}

/*
* 功能:检测页面是否合法连接过来
* 如果为非法,就转向到登陆窗口
*/
function checkurl(){
   //如果直接从浏览器连接到页面,就连接到登陆窗口
   //echo "referer:".$_SERVER['HTTP_REFERER'];
   if(!isset($_SERVER['HTTP_REFERER'])) {
    header("location: index.php");
    exit;
   }
   $urlar = parse_url($_SERVER['HTTP_REFERER']);
   //如果页面的域名不是服务器域名,就连接到登陆窗口
   if($_SERVER["HTTP_HOST"] != $urlar["host"]) {
    header("location: index.php");
    exit;
   }
}

/*
* 读取文件内容
* 参数 $file 为文件名及完整路径
* 返回文件内容
*/
function readfiles($file){
   $tdata = "";
   $fp = fopen($file, "r");

   if(filesize($file) <= 0) return;

   while($data = fread($fp, filesize($file))){
    $tdata .= $data;
   }
   fclose($fp);
   return $tdata;
}



}
[/php]

下面为一些常用的检测函数
[php]
/*
函数名称:inject_check()
函数作用:检测提交的值是不是含有SQL注射的字符,防止注射,保护服务器安全
参  数:$sql_str: 提交的变量
返 回 值:返回检测结果,ture or false
*/
function inject_check($sql_str) {
   return eregi('select|insert|and|or|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile', $sql_str);     // 进行过滤
}

/*
函数名称:verify_id()
函数作用:校验提交的ID类值是否合法
参  数:$id: 提交的ID值
返 回 值:返回处理后的ID
*/
function verify_id($id=null) {
   if (!$id) { exit('没有提交参数!'); }     // 是否为空判断
   elseif (inject_check($id)) { exit('提交的参数非法!'); }     // 注射判断
   elseif (!is_numeric($id)) { exit('提交的参数非法!'); }     // 数字判断
   $id = intval($id);     // 整型化

   return   $id;
}

/*
函数名称:str_check()
函数作用:对提交的字符串进行过滤
参  数:$var: 要处理的字符串
返 回 值:返回过滤后的字符串
*/
function str_check( $str ) {
   if (!get_magic_quotes_gpc()) {     // 判断magic_quotes_gpc是否打开
     $str = addslashes($str);     // 进行过滤
   }
   $str = str_replace("_", "\_", $str);     // 把 '_'过滤掉
   $str = str_replace("%", "\%", $str);     // 把 '%'过滤掉

   return $str;
}

/*
函数名称:post_check()
函数作用:对提交的编辑内容进行处理
参  数:$post: 要提交的内容
返 回 值:$post: 返回过滤后的内容
*/
function post_check($post) {
   if (!get_magic_quotes_gpc()) {     // 判断magic_quotes_gpc是否为打开
     $post = addslashes($post);     // 进行magic_quotes_gpc没有打开的情况对提交数据的过滤
   }
   $post = str_replace("_", "\_", $post);     // 把 '_'过滤掉
   $post = str_replace("%", "\%", $post);     // 把 '%'过滤掉
   $post = nl2br($post);     // 回车转换
   $post = htmlspecialchars($post);     // html标记转换

   return $post;
}
[/php]
[ 此帖被zl8522115在2009-04-06 23:12重新编辑 ]

作者: zl8522115   发布时间: 2009-04-04

14课的上传完整代码转换成常用的上传类,大家可以参考一下

[php]
<?php
    class upfile{
        /**
         * 初始化文件上传大小限制,上传的路径.默认为上级目录uploadimg文件夹下
         */
        public $max_file_size,$destination_folder;
        /**
         * $watertype=1; 水印类型(1为文字,2为图片)
         * $waterposition=3;     //水印位置(1为左下角,2为右下角,3为左上角,4为右上角,5为居中);
         * $waterstring="zlsky";  //水印字符串  $waterimg="../uploadimg/logo.jpg";    //水印图片
         * $imgpreview=0;      //是否生成预览图(1为生成,其他为不生成);  $imgpreviewsize=0.5;    //缩略图比例
         * $inputname='upfile'    上传表单名,默认为upfile
         */
        public $watertype=1,$waterposition=3,$waterstring='zlsky',$waterimg='../uploadimg/logo.jpg',$imgpreview=0,$imgpreviewsize=0.5,$inputname='upfile';
        /**
         * 文件上传类型,默认为图片类型
         */
        public $fname;
        public $uptypes=array(
                    'image/jpg',
                    'image/jpeg',
                    'image/png',
                    'image/pjpeg',
                    'image/gif',
                    'image/bmp',
                    'image/x-png'
                );
        function __construct($destination_folder='../uploadimg/',$max_file_size=2000000){
            $this->max_file_size=$max_file_size;
            $this->destination_folder=$destination_folder;
        }
        function upfile(){
            if ($_SERVER['REQUEST_METHOD'] == 'POST')
                {
                    if (!is_uploaded_file($_FILES["$this->inputname"][tmp_name]))
                    //是否存在文件
                    {
                         echo "图片不存在!";
                         exit;
                    }

                    $file = $_FILES["$this->inputname"];
                    if($this->max_file_size < $file["size"])
                    //检查文件大小
                    {
                        echo "文件太大!";
                        exit;
                    }

                    if(!in_array($file["type"], $this->uptypes))
                    //检查文件类型
                    {
                        echo "文件类型不符!".$file["type"];
                        exit;
                    }

                    if(!file_exists($this->destination_folder))
                    //文件夹是否存在,如果不存在就建立文件夹
                    {
                        mkdir($this->destination_folder);
                    }

                    $filename=$file["tmp_name"];                                //取得临时文件名
                    $image_size = getimagesize($filename);                         //取得图片的长度
                    $pinfo=pathinfo($file["name"]);                                //取得文件名
                    $ftype=$pinfo['extension'];                                //只取得文件名,删除掉了类型,例如test.jpg 就会变成jpg
                    $destination = $this->destination_folder.time().".".$ftype;        //连接文件夹加上 time()函数,意思是返回取得时间的 UNIX 时间戳记在加一个.在加个文件类型名
                    if (file_exists($destination) == true)        //判断如果文件夹存在
                    {
                        echo "同名文件已经存在了";
                        exit;
                    }

                    if(!move_uploaded_file ($filename, $destination))            //判断如果移动临时变量到目标文件夹下出错的话,就提示出错,并退出php
                    {
                        echo "移动文件出错";
                        exit;
                    }

                    $pinfo=pathinfo($destination);                                //得到改名后的文件名
                    $this->fname=$pinfo[basename];                                    //可能是防止有啥问题吧,又在一次得到文件名,意思应该是去掉文件夹.不过上面已经去掉一次了.又来一次
                    return true;
//                    echo " <font color=red>已经成功上传</font><br>文件名:  <font color=blue>".$destination_folder.$fname."</font><br>";
//                    echo " 宽度:".$image_size[0];
//                    echo " 长度:".$image_size[1];
//                    echo "<br> 大小:".$file["size"]." bytes";
                }else{
                    return false;
                }
        }
        /**
         * 下面的函数为加水印.暂时用不上,我也没时间改.有空我在改吧
         */
//        function watermark(){
//            $iinfo=getimagesize($destination,$iinfo);
//            $nimage=imagecreatetruecolor($image_size[0],$image_size[1]);
//            $white=imagecolorallocate($nimage,255,255,255);
//            $black=imagecolorallocate($nimage,0,0,0);
//            $red=imagecolorallocate($nimage,255,0,0);
//            imagefill($nimage,0,0,$white);
//            switch ($iinfo[2])
//            {
//                case 1:
//                $simage =imagecreatefromgif($destination);
//                break;
//                case 2:
//                $simage =imagecreatefromjpeg($destination);
//                break;
//                case 3:
//                $simage =imagecreatefrompng($destination);
//                break;
//                case 6:
//                $simage =imagecreatefromwbmp($destination);
//                break;
//                default:
//                die("不支持的文件类型");
//                exit;
//            }
//
//            imagecopy($nimage,$simage,0,0,0,0,$image_size[0],$image_size[1]);
//            imagefilledrectangle($nimage,1,$image_size[1]-15,80,$image_size[1],$white);
//
//            switch($watertype)
//            {
//                case 1:   //加水印字符串
//                imagestring($nimage,2,3,$image_size[1]-15,$waterstring,$black);
//                break;
//                case 2:   //加水印图片
//                $simage1 =imagecreatefromgif("xplore.gif");
//                imagecopy($nimage,$simage1,0,0,0,0,85,15);
//                imagedestroy($simage1);
//                break;
//            }
//
//            switch ($iinfo[2])
//            {
//                case 1:
//                //imagegif($nimage, $destination);
//                imagejpeg($nimage, $destination);
//                break;
//                case 2:
//                imagejpeg($nimage, $destination);
//                break;
//                case 3:
//                imagepng($nimage, $destination);
//                break;
//                case 6:
//                imagewbmp($nimage, $destination);
//                //imagejpeg($nimage, $destination);
//                break;
//            }
//
//            //覆盖原上传文件
//            imagedestroy($nimage);
//            imagedestroy($simage);
//        }

    }
?>
[/php]



使用例子:
我就拿一个我自己编写的产品添加代码给大家看一下.
mysql类是用的我自己编的类,就是1楼的类.
[php]
<?php
if($_POST['submit']){
            zlsky_post_trim();
            $sql=new MySql();
            $arr=array("product_spec"=>"$_POST[spec]","product_candi"=>"$_POST[producing_area]","product_price"=>$_POST[spread],"product_title"=>"$_POST[producttitle]","product_kind"=>"$_POST[productkind]","product_visible"=>"$_POST[visible]","product_content"=>"$_POST[gcontent]");
            if (is_uploaded_file($_FILES["upfile"][tmp_name])){
                include("inc/upfileclass.php");
                $upfile=new upfile();
                $upfile->upfile();
                $arr['product_img']="$upfile->fname";
            }
            if($sql->mysql_insert('product',$arr)){
                alert_msg("产品添加成功",1);
            }else{
                alert_msg("产品添加失败",1);
            }
        }
        break;
?>
[/php]
[ 此帖被zl8522115在2009-04-27 20:11重新编辑 ]

作者: zl8522115   发布时间: 2009-04-04

顶一下楼主原创!!

作者: 山猫   发布时间: 2009-04-04

很好 我顶!!!就是关于错误的处理还带加强!!

作者: dongfangling   发布时间: 2009-04-05

1w/每月我也想要哎呵呵呵

作者: flutesing   发布时间: 2009-04-05

很不错,学习了,期待下文

作者: lssxlh   发布时间: 2009-04-06

very Nice!

作者: 上课睡觉   发布时间: 2009-04-06

感觉这个。。。应该放在M比较合适

作者: cain   发布时间: 2009-04-06

顶一下.

作者: zl8522115   发布时间: 2009-04-27

顶一个

作者: 無戒寺   发布时间: 2009-04-27

  学习了

作者: denly6666   发布时间: 2009-04-27

顶一下.

作者: tochenwei   发布时间: 2009-05-08

很不错,学习了

作者: 埖落埖閞   发布时间: 2009-05-08

很强大,拿回去再学习下

作者: slg1984   发布时间: 2009-05-08

路过

作者: cyr11   发布时间: 2009-05-10

顶一下.

作者: 埖落埖閞   发布时间: 2009-05-18

真好人纳

作者: tingfeng0311   发布时间: 2009-05-18

这个东东好啊!!!
收藏

作者: didan   发布时间: 2009-06-28

好东西,楼主辛苦了!

作者: xiaokai   发布时间: 2009-06-28

支持原创

作者: uncleliu   发布时间: 2009-06-28

这么好的学习帖子我一定要支持。!!!!!!

作者: garnetty   发布时间: 2009-06-30

无比崇敬中.....

作者: williamzhao   发布时间: 2010-04-03

扒下来学习学习

作者: 草泥马戈壁   发布时间: 2010-04-04

顶你  GOOD

作者: say764211502   发布时间: 2010-04-16

挺好
有点小问题
$uf='gb2312'

作者: jjww   发布时间: 2010-04-21

谢谢了!学习!

作者: zhsanshi   发布时间: 2010-04-21

很不错,学习了

作者: zhsanshi   发布时间: 2010-04-21

不错,不错,学习了

作者: ccs6510322   发布时间: 2010-04-21

厉害,学习了啊!~

作者: elileo   发布时间: 2010-04-21