require_once(dirname(__FILE__)."/Lwgdb.inc.php");//数据库毗连与查询类
require_once(dirname(__FILE__)."/Lwgupload.inc.php");//父类
class Lwguploadandquery extends Lwgupload{
var $sql;//sql语句
var $url;//文件上传胜利后转向的url
//主要提醒:sql语句写法:
//$sql=sprintf("update test1 set name='%s', image1='%s', image2='%s' where id='%d'",$_POST['name'],"image1_name","image2_name",$_POST['id']);
//"image1_name","image2_name"中,image1和image2是文件域的name或id,前面加了"_name"后缀,便于上面找到它并修正它
function Lwguploadandquery($sql="",$uploadfield="",$url="",$uploadpath="",$maxsize="",$ftype="all"){
$this->sql=$sql;
$this->url=$url;
$this->Lwgupload($uploadfield,$uploadpath,$maxsize,$ftype);
}
function run(){
if (empty($this->sql))return $this->output("没有可履行的SQL语句。");
if (!is_array($this->uploadfield))$this->uploadfield=array($this->uploadfield);//假如不为数组改成数组,便于前面代码的简化
if (!is_array($this->maxsize))$this->maxsize=array($this->maxsize);//同上
if (!is_array($this->ftype))$this->ftype=array($this->ftype);//同上
$totaluploadfield=count($this->uploadfield);
for ($i=0;$i<$totaluploadfield;$i++){
$uploadfile=$_FILES[$this->uploadfield[$i]]['tmp_name'];
$file_name=$_FILES[$this->uploadfield[$i]]['name'];
$file_old=$_POST[$this->uploadfield[$i].'_old'];//用在更新中,暗示上传文件所对应的原有文件
$file_del=$_POST[$this->uploadfield[$i].'_del'];//原有文件是不是标志为删除
if ($uploadfile!=""&&$file_name!=""){
//暗示需求上传,即文件域里填入了任何字符
$uploadfield[]=$this->uploadfield[$i];
//获得新的上传字段,由于文件域中没有填入任何字符的不必上传
$maxsize[]=(!empty($this->maxsize[$i]))?$this->maxsize[$i]:$this->maxsize[0];
//获得绝对应的巨细限制值
$ftype[]=(!empty($this->ftype[$i]))?$this->ftype[$i]:$this->ftype[0];
//获得绝对应的类型限制值
$newfile=$this->uploadpath."/".$file_name;
//上传后的文件地址
$insertname=$file_name;
//修正sql言语时要用到,将mysql表中对应字段的值改成今朝上传文件名
if ($file_old!="")$oldfile[]=$this->uploadpath."/".sprintf('%s',$file_old);
//用在更新中,获得原有文件地址,当新文件上传后删除旧文件
}
else if ($file_old!=""){
//暗示不需求上传,即文件域里没有填入任何字符,然而有旧文件
if ($file_del=="true"){
//假如旧文件标志为删除
$insertname="";
//修正sql言语时要用到,将mysql表中对应字段的值改成空
$oldfile[]=$this->uploadpath."/".sprintf('%s',$file_old);
}
else $insertname=sprintf('%s',$file_old);
//既不必上传也不必删除,修正sql言语时要用到,将mysql表中对应字段的值改成原文件名
}
else $insertname="";
//既不必上传也没有原文件,修正sql言语时要用到,将mysql表中对应字段的值改成空
$this->sql=str_replace($this->uploadfield[$i]."_name", $insertname, $this->sql);
//修正sql语句
}
class Lwgupload{
//-------------可以设置值的变量------------------------
var $uploadfield;//上传文件的字段名
var $maxsize;//限制上传文件的巨细
var $file_old;//需求删除的旧文件
var $uploadpath;//文件的上传途径
var $ftype;//限制上传文件的类型
var $debug=true;//是不是显示调试或毛病信息
//------------用来获得值的变量---------------------------
var $uploadfile;//上传后的一时文件
var $file_name;//文件名
var $file_size;//文件的巨细
var $file_size_format;//格局化后的$file_size
var $file_type;//文件类型
var $debugstr="";//纪录调试信息
var $err="";//纪录毛病信息
//test()用来测试可否全体上传,不然一个也不要上传
//$oldfile暗示要删除的文件,用在更新中,删除旧的上传新的
function test($oldfile=''){
if ($this->uploadfield=="")return;
if (empty($this->uploadpath))$this->uploadpath=dirname($_SERVER['PATH_TRANSLATED'])."/Upload";
if (empty($this->maxsize))$this->maxsize=1048576;
if (!is_array($this->uploadfield))$this->uploadfield=array($this->uploadfield);
//假如不为数组改成数组,便于前面代码的简化
$total_upload=count($this->uploadfield);//取得总字段数
if (!is_array($this->maxsize))$this->maxsize=array($this->maxsize);//假如不为数组改成数组,便于前面代码的简化
if (!is_array($this->ftype))$this->ftype=array($this->ftype);//同上
//假如没有响应途径则创立之
if (!file_exists($this->uploadpath)){
if (!mkdir($this->uploadpath,0700))return output("毛病!请手动创立无效途径。");
}
//测试过关后可以上传
function upload(){
if ($this->uploadfield=="")return false;
$total_upload=count($this->uploadfield);
for ($i=0;$i<$total_upload;$i++){
$this->file_size_format[$i]=$this->format_maxsize($this->file_size[$i]);
if (@move_uploaded_file($this->uploadfile[$i],$this->newfile[$i]))
$this->debugstr.="文件'".$this->file_name[$i]."'(".$this->file_size_format[$i].")上传胜利。<br>";
else {
if ($i>0)$this->err_del(($i-1),$this->newfile);
//假如有一个上传掉败,则删除一切已上传的文件
return $this->output("对不起!文件'".$this->file_name[$i]."'上传掉败。请重试。");
}
}
return true;
}
//格局化文件巨细数字
function format_maxsize($value){
if ($value<1024)$maxsize_Value = $value."字节";
elseif ($value<1024*1024)$maxsize_Value = number_format((double)($value/1024),2)."kb";
else $maxsize_Value = number_format((double)($value/(1024*1024)),2)."mb";
return $maxsize_Value;
}
//失足后删除已上传的文件
function err_del($i,$thefile){
while ($i>=0){
if (@unlink($thefile[$i])!=false)$this->debugstr.="文件'".$thefile[$i]."'删除胜利 <br>";
$i--;
}
}
//纪录和输入毛病信息
function output($msg){
if ($msg!="")$this->err=$msg;
if ($this->debug)echo "<script language=\"JavaScript\" type=\"text/JavaScript\">alert(\"".$msg."\");history.go(-1)</script>";
return false;
}
}
/*
----------------利用办法-----------------------------------------------
$obj=Lwgupload("image1","",1024*2,"all");
if ($obj->test())$obj->upload();
-------------------------------------------------------------------------
*/
?>