首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > PHP >

当执行mysql insert 时插入两条是咋回事

2013-08-01 
当执行mysql insert 时插入两条是怎么回事?本帖最后由 Eason_____________ 于 2013-07-25 11:25:44 编辑//

当执行mysql insert 时插入两条是怎么回事?
本帖最后由 Eason_____________ 于 2013-07-25 11:25:44 编辑 //做了一个手机上传图片到服务器的功能。但是获取到执行insert语句时都要执行两次!

//index.php


<?php
header("Content-Type: text/html; charset=UTF-8");
mysql_connect("localhost","dome_huayan","e2k3e6b8");
mysql_select_db("dome_huayan");
mysql_query("set names utf8");

include 'uploadImage.php';
$gettitle=$_GET['title'];
$getcontent=$_GET['content'];
$i = new uploadImage($_FILES['filename'],'./img/');
$i->doWork();
$i->imageCheck();

$sql="insert into json_bbs values('','".$gettitle."','".$getcontent."','".$i->iamgePath."','".time()."','')";
mysql_query($sql);
?>


//uploadImage.php


<?php
/**
 * 
 * 图片上传类
 * @author ChenYue
 *
 * @param $mageStauts                 图片上传状态 1为正常状态
 * @param $iamgePath                  图片上传成功保存在数据库的路径
 * @param $imagePathTemp              临时保存图片上传成功保存在数据库的路径
 * @param $destination_folder       上传文件路径
 * @param $imageName                  上传的图片名(可自定义)
 * @param $fileArray                  上传的图片信息数组
 * @param $updateImage                判断是否更新原有图片 0表示不更新 , 1 表示更新
 * @param $uptypes                    支持上传的图片类型
 * @param max_file_size               支持上传的图片最大类型
 * @param imageType                   图片的类型
 * 
*/
class uploadImage{

public $imageStauts = 1;
public $iamgePath=''; 
public $imagePathTemp = "";
private $destination_folder; 
private $imageName; 
private $fileArray;
private $updateImage = 0; 
private $uptypes = array(
    'image/jpg',


    'image/jpeg',
    'image/png',
    'image/x-png');

    private $imageType = array('jpg','jpeg','png');
const max_file_size=2000000;     


/**
 * 构造函数
 * @param $file 上传的图片信息数组
 * @param $destination 上传文件路径
 * @param $name 上传的图片名(可自定义)没定义,上传后的图片名为time()
 * @param $dbPath 图片上传成功保存在数据库的路径
 * @param $update 判断是否更新原有图片 0表示不更新 , 1 表示更新 。 更新会把已经存在的图片替换掉
*/

function __construct($file,$destination="",$name="",$dbPath="",$update=0){

if(strtolower($_SERVER['REQUEST_METHOD']) != 'post'){
$this->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;
}
}


}

?>

MySQL 数据库


[解决办法]

引用:
Quote: 引用:

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条数据属于正常的
[解决办法]
看看你的表单

热点排行