天天看点

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中文网,转载请注明出处,感谢您的尊重!