天天看點

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

本帖最後由 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

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

添加圖檔

釋出

從手機相冊選擇

拍照

取消

看看你的表單

斑竹說表單,你給資料庫。。

是表單部分的代碼和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送出的是時候先執行上圖圖檔部分,然後得到傳回正常的圖檔位址(這裡還不插入資料庫,純粹上傳圖檔)以後再執行再執行文字表單部分,這時候圖檔位址是用一個參數傳,這樣就可以和文字一起插入資料庫了,也就隻有一條資料了

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

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

本文原創釋出php中文網,轉載請注明出處,感謝您的尊重!