ホームページ >バックエンド開発 >PHPチュートリアル >mysql insert を実行するときに 2 つの項目が挿入されるとどうなりますか?

mysql insert を実行するときに 2 つの項目が挿入されるとどうなりますか?

WBOY
WBOYオリジナル
2016-06-23 14:16:593943ブラウズ

この投稿の最終編集者は Eason_____________ 2013-07-25 11:25:44

MySQL データベース

//携帯電話からサーバーに写真をアップロードする機能を作りました。ただし、insert ステートメントを実行するときは 2 回実行する必要があります。

//index.php
<?phpheader("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;		}	}}?>

ディスカッションに返信(解決策)

助けてください!

これは、index.php コードのすべてですか?
実行後はリフレッシュされますか?ジャンプした?

これは、index.php コードのすべてですか?
実行後はリフレッシュされますか?ジャンプした?
js から渡されたタイトルとコンテンツもあります

これは、index.php コードだけですか?
実行後はリフレッシュされますか?ジャンプした?

実行中にindex.php

if($_GET['title']!=''){$sql="insert into json_bbs values('','".$gettitle."','".$getcontent."','".$i->iamgePath."','".time()."','')";mysql_query($sql);}


を判定すると、データは1つだけ挿入されますが、$i->iamgePathの値が取得できず、$i->iamgePathは空になります。

判断しない場合は、次の 2 つのデータを挿入します:
id title content image time uid 127 aaa yyyyy 1374 722311 0
128 2013_7_25_11_18_32.jpg 1374722312 0


これは、index.php コードのすべてですか? ?
実行後はリフレッシュされますか?ジャンプした?
また、タイトルと内容はjsから渡されますか?
タイトルと内容はjsから渡されますか?どのように渡されるのでしょうか?
js が渡されるときにスクリプトが実行され、画像がアップロードのために送信されるときに挿入が実行される可能性はありますか?ということは、レコードは2つあるということですか?

これは、index.php コードのすべてですか?

実行後はリフレッシュされますか?ジャンプした?

実行中にindex.php

if($_GET['title']!=''){$sql="insert into json_bbs values('','".$gettitle."','".$getcontent."','".$i->iamgePath."','".time()."','')";mysql_query($sql);}


を判定すると、データは1つだけ挿入されますが、$i->iamgePathの値が取得できず、$i->iamgePathは空になります。

判断しない場合は、次の 2 つのデータを挿入します:
id title content image time uid 127 aaa yyyyy 1374 722311 0
128 2013_7_25_11_18_32.jpg 1374722312 0


一目見て、これは次のようにして得られた挿入です。 2 つの異なる操作を実行しています
あなた これら 2 つのアクションのうち、1 つは更新アクションである必要があります。後で実行されるアクションは、挿入アクションではなく更新アクションのみであると言うべきです

つまり、あなた自身のロジックに問題があります。 2 つのデータを挿入するのは正常です

見てください フォームを見てください

フォームを見てください


これは、index.php コードのすべてですか?

実行後はリフレッシュされますか?ジャンプした?
また、タイトルと内容はjsから渡されますか?
タイトルと内容はjsから渡されますか?どのように渡されるのでしょうか? jsが渡されるときにスクリプトが実行され、画像がアップロードのために送信されるときに挿入が実行される可能性はありますか?ということは、レコードは2つあるということですか?

json によって渡されました


フォームを見てください

Bamboo は、フォームをデータベースに渡すと言いました。 。

はform部分のコードとjs部分のコードです。




フォームを見てください

Bamboo は、フォームをデータベースに渡すと言いました。 。

はform部分のコードとjs部分のコードです。

ajax
渡した後に挿入が実行されませんか?
フォームを送信して再度実行します。
データが 2 つしかありません


フォームを見てください

<!DOCTYPE html><html class="um landscape min-width-240px min-width-320px min-width-480px min-width-768px min-width-1024px">  <head>    <title>    </title>    <meta charset="utf-8">    <meta name="viewport" content="target-densitydpi=device-dpi, width=device-width, initial-scale=1, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">    <link rel="stylesheet" href="css/ui-input.css">    <link rel="stylesheet" href="css/ui-btn.css">    <link rel="stylesheet" href="css/ui-img.css">    <link rel="stylesheet" href="css/ui-list.css">    <link rel="stylesheet" href="css/ui-res.css">    <link rel="stylesheet" href="css/ui-fold.css">    <link rel="stylesheet" href="css/ui-base.css">    <link rel="stylesheet" href="css/ui-box.css">    <link rel="stylesheet" href="css/ui-color.css">    <script src="js/zy_anim.js">    </script>    <script src="js/zy_control.js">    </script> 	<script src="js/zy_tmpl.js">    </script>	<script src="js/zy_click.js">    </script>	<script src="js/zy_json.js">    </script>    </head>  <body class="um-vp" ontouchstart><div class="btm" id="yinying" style="display:none"></div><div class="c-wh" id="fb_content">    	     <!--文本开始-->    <div class="ub t-bla ulab">      <div class="ub-f1 c-wh uba uc-a1 b-gra us-i uinput uinn4" style="margin-top:5%">      <input placeholder="标题..."  type="text" name="title" class="uc-a1" id="fb-title">       </div>    </div>    <!--文本结束-->    <!--文本开始-->    <div class="ub t-bla ulab fb-btn">      <div class="ub-f1 c-wh uba uc-a1 b-gra us-i uinput uinn4">      <textarea  placeholder="请输入内容"  name="content" rows="7" id="fb-content" ></textarea>    </div>    </div>    <!--文本结束-->    <div style=" display:none; width:20%; height:15%; margin-top:5%; left:1%" id="show_img">    	<span class="del" onClick="del()">x</span>        <img style="width:100%; height:100%;display:block; border:1px solid #CCC;" src="" id="showPic" />            </div>	<!--按钮开始-->    <div ontouchstart="zy_touch('btn-act')" class="btn uba b-bla uinn5 c-blu1 c-m2 uc-a1 t-wh img-add"  onclick="picSeclet();" id="selectPic">添加图片</div>	<!--按钮结束-->    	<!--按钮开始-->    <div ontouchstart="zy_touch('btn-act')" class="btn uba b-bla uinn5 c-blu1 c-m2 uc-a1 t-wh img-add" onClick="upload()">发布</div>	<!--按钮结束-->    <div style="position:absolute; bottom:0; width:100%; z-index:100; display:none" id="divPic">             <div ontouchstart="zy_touch('c-m2');" data-role="button" onclick="uexImageBrowser.pick();" class="btn uba b-bla uinn5 c-bla c-m1 uc-a1 t-wh img-add1">                     <span class="ui-btn-inner ui-btn-corner-all">                     <span class="ui-btn-text t-wh">从手机相册选择</span>                     </span>            </div>             <div ontouchstart="zy_touch('c-m2');" data-role="button" onclick="uexCamera.open();" class="btn uba b-bla uinn5 c-bla c-m1 uc-a1 t-wh img-add1">                     <span class="ui-btn-inner ui-btn-corner-all">                     <span class="ui-btn-text t-wh">拍照</span>                     </span>            </div>            <div ontouchstart="zy_touch('c-m2');" data-role="button" onclick="picClose();" class="btn uba b-bla uinn5 c-bla c-m1 uc-a1 t-wh img-add1">                     <span class="ui-btn-inner ui-btn-corner-all">                     <span class="ui-btn-text t-wh">取消</span>                     </span>            </div>    </div></div></body><script>zy_init();window.uexOnload=function(type){	if(!type){		uexWindow.setBounce("1");		uexWindow.showBounceView("0","#FFF","0");		uexWindow.showBounceView("1","#FFF","0");	}}        var uploadHttp = "http://www.huayan.cd/json/bbs/index.php";        function setLog(msg){                document.getElementById("msgid").innerHTML = msg;        }        function upload(){				if($$("fb-title").value=='' || $$("fb-content").value==''){					alert("标题或内容不能为空");				}else{					uexUploaderMgr.createUploader(1,uploadHttp);					var fbtitle = $$("fb-title").value;					var fbcontent = $$("fb-content").value;					var url = 'http://localhost/json/bbs/index.php?title='+fbtitle+'&content='+fbcontent;					$.getJSON(url,function(data){						alert(data.title);						alert(data.content);						alert(data.time);						alert(data.time1);					});				}        }        function picSeclet(){                document.getElementById("yinying").style.display = "block";                document.getElementById("divPic").style.display = "block";        }        function picClose(){                document.getElementById("yinying").style.display = "none";                document.getElementById("divPic").style.display = "none";        }        function del(){                document.getElementById("show_img").style.display = "none";                document.getElementById("showPic").src = "";        }        var upload_image_url = "";        window.uexOnload = function(){                uexCamera.cbOpen = function(opCode, dataType, data){                        upload_image_url = data;                        document.getElementById("showPic").src = data;                        document.getElementById("show_img").style.display = "block";                        document.getElementById("divPic").style.display = "none";						document.getElementById("yinying").style.display = "none";                }				                uexWidgetOne.cbError = function(opCode, errorCode, errorInfo){                        setLog(errorInfo);                }                                uexImageBrowser.cbPick=function (opCode,dataType,data){		        if(dataType==0){									upload_image_url = data;	              				document.getElementById("showPic").src = data;									document.getElementById("show_img").style.display = "block";									document.getElementById("yinying").style.display = "none";									document.getElementById("divPic").style.display = "none";		        }	           }	                uexUploaderMgr.cbCreateUploader =function(opCode,dataType,data){                        if(data == 0){                                        uexUploaderMgr.uploadFile(1,upload_image_url,"filename",4);                                        uexWindow.toast(1,5,"图片上传中...",0);                        }else{                        }                                        }				                uexUploaderMgr.onStatus = function(opCode,fileSize,percent,serverPath,status){                        switch (status) {                                        case 0:                                                break;                                        case 1:                                                uexWindow.closeToast();//关闭提示消息框                                                uexWindow.toast(0,5,"发布成功!",2000);                                                //uexWindow.closeToast();//关闭提示消息框                                                uexUploaderMgr.closeUploader(1);                                                break;                                        case 2:                                                uexWindow.closeToast();//关闭提示消息框                                                uexWindow.toast(0,5,"出错啦~",2000);                                                uexUploaderMgr.closeUploader(1);                                                break;                        }                                        }        }</script></html>




フォームを見てください

Buzhu は、フォームをデータベースに送信すると言いました。 。
はform部分のコードとjs部分のコードです。

ajax
渡した後に挿入が実行されませんか?
フォームを送信して再度実行します。
データは2つだけではないでしょうか?

と判断すると、 if($_GET["title"]!=''){

}
で1回実行されます。

しかし、挿入されたデータ $i->iamgePath の値は空です。何が起こっているのでしょうか?

テキストの送信とファイルのアップロード自体は別です

テキストの送信とファイルのアップロード自体は別です

さて、これは appcan で作成したモバイルアプリです


テキストの送信とファイルのアップロード自体は別です

2 つのアイテムを挿入する問題は解決されましたが、挿入時に $i->iamgePath の値が取得できません。
ただし、挿入が 2 つある場合は、$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);
ただし、通常、ファイルのアップロードはテキスト送信よりも常に遅いため、最初にデータを取得してからファイルをアップロードすることができます。
しかし、状況がまったく逆の場合はどうでしょうか?



テキストの送信とファイルのアップロード自体は別です

これで、2 つの項目を挿入するときに $i->iamgePath の値を取得できないという問題は解決されました。
ただし、2 つの項目を挿入すると、$i->iamgePath が使用可能になります。

これは、実際に多くの Web サイトでも使用されているということを示唆しています。 ajax を送信すると、最初に上記の画像の画像部分が実行され、その後通常の画像アドレスが返されます (ここではデータベースは挿入されず、画像が純粋にアップロードされます)、その後でテキスト フォーム部分が実行されます。今回は、画像アドレスがパラメーターで渡されるため、テキストと一緒にデータベースに挿入できます。データは 1 つだけです




テキストの送信とファイルのアップロード自体は別です。
これで、挿入時に $i->iamgePath の値が取得できない問題は解決されました。
挿入が 2 つの項目の場合、$i->iamgePath がアイデアと提案を提供します。
上の画像の画像部分は iframe を使用しています。ajax を送信するとき、上の画像の画像部分が最初に実行され、その後通常の画像アドレスが返されます (データベースは返されません)。ここに挿入します(純粋に写真をアップロードします)してテキストフォーム部分を実行します。このとき、画像アドレスはパラメータとして渡されるため、テキストと一緒にデータベースに挿入できます。データは 1 つだけです。

アイデアを提供してくれた 2 人のモデレーターに感謝します

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。