本帖最後由 Eason_____________ 于 2013-07-25 11:25:44 編輯
MySQL 資料庫 //做了一個手機上傳圖檔到伺服器的功能。但是擷取到執行insert語句時都要執行兩次!
//index.php
doWork();$i->imageCheck();$sql="insert into json_bbs values('','".$gettitle."','".$getcontent."','".$i->iamgePath."','".time()."','')";mysql_query($sql);?>
//uploadImage.php
imageStauts = 'Error! Wrong HTTP method!';}if(is_array($file) && count($file)>0 && !empty($destination)){$this->fileArray = $file;$this->destination_folder = $destination;$this->imageName = $name;$this->imagePathTemp = $dbPath;$this->updateImage = $update;}else{$this->imageStauts = '初始化失敗';}}function imageStart(){if($this->imageStauts === 1){$this->imageCheck();}if($this->imageStauts === 1){$this->doWork();}}function imageCheck(){$file = $this->fileArray;//print_r($file);if(!is_uploaded_file($file['tmp_name']) && $this->imageStauts === 1){$this->imageStauts = '圖檔不存在!'; }if(uploadImage::max_file_size < $file['size'] && $this->imageStauts === 1){$this->imageStauts = '檔案太大';} //防止在圖檔中繼資料的Comment字段中加入了php代碼//通過二進制比對檢查$fileInfo = pathinfo($this->fileArray['name']);$fileType = strtolower($fileInfo['extension']);if(!in_array($fileType, $this->imageType) && $this->imageStauts === 1){$this->imageStauts = '不支援 '.$fileType.' 類型的檔案';} if(!file_exists($this->destination_folder) && $this->imageStauts === 1){mkdir($this->destination_folder,0777);//設定檔案權限}}function doWork(){$fileName = $this->fileArray['tmp_name'];$fileSize = getimagesize($fileName);$fileInfo = pathinfo($this->fileArray['name']);$fileType = strtolower($fileInfo['extension']);$n = !empty($this->imageName) ? $this->imageName : date("Y_n_d_H_i_s");$destination = $this->destination_folder.$n.'.'.$fileType;//圖檔本地路徑$this->imagePathTemp = $this->imagePathTemp.$n.'.'.$fileType;//将要儲存在資料庫的路徑//上傳圖檔,若圖檔存在不更新已有圖檔if(file_exists($destination) && $this->imageStauts === 1 && $this->updateImage == 0){$this->imageStauts = '圖檔已存在';}//上傳圖檔,若圖檔存在更新已有圖檔if($this->imageStauts === 1 && $this->updateImage == 1){$deleteIMageDestination = $this->destination_folder.$n; //圖檔儲存本地路徑,包含檔案名,但不包含圖檔字尾名if($this->deleteImage($deleteIMageDestination)){}else{$this->imageStauts = '删除已存在圖檔失敗';}}if(!move_uploaded_file($fileName, $destination) && $this->imageStauts === 1){$this->imageStauts = '傳輸錯誤';}if($this->imageStauts === 1){$this->iamgePath = $this->imagePathTemp;return $this->imageStauts;}}function deleteImage($path){if(!empty($path)){foreach($this->imageType as $type){$_path = $path.'.'.$type;if(file_exists($_path)){//echo $_path;if(!unlink($_path)){$this->imageStauts = '删除已存在圖檔失敗';return 0;}}}return 1;}else{$this->imageStauts = '待删除圖檔路徑不能為空';return 0;}}}?>
回複讨論(解決方案)
求幫忙看看!
index.php 代碼就隻有這些?
是不是執行後又重新整理了?跳轉了?
index.php 代碼就隻有這些?
是不是執行後又重新整理了?跳轉了?
還有就是js傳過來的 title 和 content
index.php 代碼就隻有這些?
是不是執行後又重新整理了?跳轉了?
如果判斷一下index.phpif($_GET['title']!=''){$sql="insert into json_bbs values('','".$gettitle."','".$getcontent."','".$i->iamgePath."','".time()."','')";mysql_query($sql);}
在執行的話 就隻插入一條資料了,但是擷取不到$i->iamgePath的值,$i->iamgePath就為空。
不判斷的話 是插入以下兩條資料:
id title content images time uid
127 aaa yyyyy 1374722311 0
128 2013_7_25_11_18_32.jpg 1374722312 0
index.php 代碼就隻有這些?
是不是執行後又重新整理了?跳轉了?
還有就是js傳過來的 title 和 content
js傳來的title和content?怎麼傳遞的
會不會js傳遞時執行了腳本,送出上傳圖檔時又執行了insert。是以是兩條記錄?
index.php 代碼就隻有這些?
是不是執行後又重新整理了?跳轉了?
如果判斷一下index.phpif($_GET['title']!=''){$sql="insert into json_bbs values('','".$gettitle."','".$getcontent."','".$i->iamgePath."','".time()."','')";mysql_query($sql);}
在執行的話 就隻插入一條資料了,但是擷取不到$i->iamgePath的值,$i->iamgePath就為空。
不判斷的話 是插入以下兩條資料:
id title content images time uid
127 aaa yyyyy 1374722311 0
128 2013_7_25_11_18_32.jpg 1374722312 0
你這個一看就是2個不同操作執行得到的插入
你這2個動作,一個應該是更新動作,應該說是後來執行的那個動作隻能是更新動作,不能是插入動作
是以你本身邏輯上出現了問題,插入2條資料屬于正常的
看看你的表單
看看你的表單
index.php 代碼就隻有這些?
是不是執行後又重新整理了?跳轉了?
還有就是js傳過來的 title 和 content
js傳來的title和content?怎麼傳遞的
會不會js傳遞時執行了腳本,送出上傳圖檔時又執行了insert。是以是兩條記錄?
json傳遞的
看看你的表單
斑竹說表單,你給資料庫。。
是表單部分的代碼和js部分的代碼。
看看你的表單
斑竹說表單,你給資料庫。。
是表單部分的代碼和js部分的代碼。
ajax?
傳遞過來不就執行insert了麼?
送出表單又執行一次。
不就剛好兩條資料麼
看看你的表單x
添加圖檔
釋出
從手機相冊選擇
拍照
取消
看看你的表單
斑竹說表單,你給資料庫。。
是表單部分的代碼和js部分的代碼。
ajax?
傳遞過來不就執行insert了麼?
送出表單又執行一次。
不就剛好兩條資料麼
如果我判斷一下
就是 if($_GET["title"]!=''){
}
就執行了一次。
但是插入的資料 $i->iamgePath的值就為空 這個是怎麼回事?
你的文字送出和檔案上傳本身就是分開的
你的文字送出和檔案上傳本身就是分開的
嗯 這是我用appcan做的手機app.
你的文字送出和檔案上傳本身就是分開的
現在插入兩條的問題解決了 就是插入的時候 擷取不到$i->iamgePath的值。
但是當insert 是兩條的時候 $i->iamgePath就會有。
這是在送出文字
105 var url = 'http://localhost/json/bbs/index.php?title='+fbtitle+'&content='+fbcontent;
106 $.getJSON(url,function(data){
這是在送出檔案
152 uexUploaderMgr.uploadFile(1,upload_image_url,"filename",4);
雖然在文本送出前就啟動了檔案送出
102 uexUploaderMgr.createUploader(1,uploadHttp);
但一般檔案上傳總要慢于文本送出,是以你能先收到 get 資料,後收到 上傳檔案
但如果情況恰恰相反呢?
你的文字送出和檔案上傳本身就是分開的
現在插入兩條的問題解決了 就是插入的時候 擷取不到$i->iamgePath的值。
但是當insert 是兩條的時候 $i->iamgePath就會有。
給你一個思路和建議,其實不少網站也在用,就是:
上圖圖檔部分用iframe,在ajax送出的是時候先執行上圖圖檔部分,然後得到傳回正常的圖檔位址(這裡還不插入資料庫,純粹上傳圖檔)以後再執行再執行文字表單部分,這時候圖檔位址是用一個參數傳,這樣就可以和文字一起插入資料庫了,也就隻有一條資料了
你的文字送出和檔案上傳本身就是分開的
現在插入兩條的問題解決了 就是插入的時候 擷取不到$i->iamgePath的值。
但是當insert 是兩條的時候 $i->iamgePath就會有。
給你一個思路和建議,其實不少網站也在用,就是:
上圖圖檔部分用iframe,在ajax送出的是時候先執行上圖圖檔部分,然後得到傳回正常的圖檔位址(這裡還不插入資料庫,純粹上傳圖檔)以後再執行再執行文字表單部分,這時候圖檔位址是用一個參數傳,這樣就可以和文字一起插入資料庫了,也就隻有一條資料了
謝謝兩位版主給的思路。 我在試一試
本文原創釋出php中文網,轉載請注明出處,感謝您的尊重!