当执行mysqlinsert时插入两条是怎么回事?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了当执行mysqlinsert时插入两条是怎么回事?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含8132字,纯文字阅读大概需要12分钟。
内容图文
![当执行mysqlinsert时插入两条是怎么回事?](/upload/InfoBanner/zyjiaocheng/196/71746a3926ed4508ada707867c843c05.jpg)
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-type if(!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提交的是时候先执行上图图片部分,然后得到返回正常的图片地址(这里还不插入数据库,纯粹上传图片)以后再执行再执行文字表单部分,这时候图片地址是用一个参数传,这样就可以和文字一起插入数据库了,也就只有一条数据了
谢谢两位版主给的思路。 我在试一试
内容总结
以上是互联网集市为您收集整理的当执行mysqlinsert时插入两条是怎么回事?全部内容,希望文章能够帮你解决当执行mysqlinsert时插入两条是怎么回事?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。