目次
ディスカッションに返信(解決策)
ホームページ バックエンド開発 PHPチュートリアル mysql insert を実行するときに 2 つの項目が挿入されるとどうなりますか?

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

Jun 23, 2016 pm 02:16 PM

この投稿の最終編集者は 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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

セッションのハイジャックはどのように機能し、どのようにPHPでそれを軽減できますか? セッションのハイジャックはどのように機能し、どのようにPHPでそれを軽減できますか? Apr 06, 2025 am 12:02 AM

セッションハイジャックは、次の手順で達成できます。1。セッションIDを取得します。2。セッションIDを使用します。3。セッションをアクティブに保ちます。 PHPでのセッションハイジャックを防ぐための方法には次のものが含まれます。1。セッション_regenerate_id()関数を使用して、セッションIDを再生します。2。データベースを介してストアセッションデータを3。

確固たる原則と、それらがPHP開発にどのように適用されるかを説明してください。 確固たる原則と、それらがPHP開発にどのように適用されるかを説明してください。 Apr 03, 2025 am 12:04 AM

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

phpstormでCLIモードをデバッグする方法は? phpstormでCLIモードをデバッグする方法は? Apr 01, 2025 pm 02:57 PM

phpstormでCLIモードをデバッグする方法は? PHPStormで開発するときは、PHPをコマンドラインインターフェイス(CLI)モードでデバッグする必要がある場合があります。

システムの再起動後にUnixSocketの権限を自動的に設定する方法は? システムの再起動後にUnixSocketの権限を自動的に設定する方法は? Mar 31, 2025 pm 11:54 PM

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? Apr 01, 2025 pm 03:12 PM

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。

See all articles