當執行mysql insert 時插入兩條是怎麼回事?

來源:互聯網
上載者:User
本帖最後由 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 =  '檔案太大';}                /*//檢查mime-typeif(!in_array(strtolower($file['type']), $this->uptypes) && $this->imageStauts === 1){$this->imageStauts =  '不支援 '.$file['type'].' 類型的檔案';}                *///防止在圖片中繼資料的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;}}/** * 刪除圖片 * @param $path  圖片在本地的儲存路徑 * @return 成功返回1 失敗返回0*/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.php

if($_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.php

if($_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提交的是時候先執行圖片部分,然後得到返回正常的圖片地址(這裡還不插入資料庫,純粹上傳圖片)以後再執行再執行文字表單部分,這時候圖片地址是用一個參數傳,這樣就可以和文字一起插入資料庫了,也就只有一條資料了

謝謝兩位版主給的思路。 我在試一試

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.