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("錯誤!請手動建立有效路徑。");
}