MySQL データベース
//携帯電話からサーバーに写真をアップロードする機能を作りました。ただし、insert ステートメントを実行するときは 2 回実行する必要があります。<?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);?>
<?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);}
これは、index.php コードのすべてですか? ?
実行後はリフレッシュされますか?ジャンプした?
また、タイトルと内容はjsから渡されますか?
タイトルと内容はjsから渡されますか?どのように渡されるのでしょうか?
js が渡されるときにスクリプトが実行され、画像がアップロードのために送信されるときに挿入が実行される可能性はありますか?ということは、レコードは2つあるということですか?
実行後はリフレッシュされますか?ジャンプした?
実行中にindex.php
if($_GET['title']!=''){$sql="insert into json_bbs values('','".$gettitle."','".$getcontent."','".$i->iamgePath."','".time()."','')";mysql_query($sql);}
実行後はリフレッシュされますか?ジャンプした?
また、タイトルと内容はjsから渡されますか?
タイトルと内容はjsから渡されますか?どのように渡されるのでしょうか? jsが渡されるときにスクリプトが実行され、画像がアップロードのために送信されるときに挿入が実行される可能性はありますか?ということは、レコードは2つあるということですか?
json によって渡されました
フォームを見てください
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 が存在します。
これはテキストを送信しています
106 $.getJSON(url,function(data ) {
これはファイルを送信しています
152 uexUploaderMgr.uploadFile(1,upload_image_url,"filename",4);
ただし、通常、ファイルのアップロードはテキスト送信よりも常に遅いため、最初にデータを取得してからファイルをアップロードすることができます。
しかし、状況がまったく逆の場合はどうでしょうか?
テキストの送信とファイルのアップロード自体は別です
これで、2 つの項目を挿入するときに $i->iamgePath の値を取得できないという問題は解決されました。
ただし、2 つの項目を挿入すると、$i->iamgePath が使用可能になります。
テキストの送信とファイルのアップロード自体は別です。
これで、挿入時に $i->iamgePath の値が取得できない問題は解決されました。
挿入が 2 つの項目の場合、$i->iamgePath がアイデアと提案を提供します。
上の画像の画像部分は iframe を使用しています。ajax を送信するとき、上の画像の画像部分が最初に実行され、その後通常の画像アドレスが返されます (データベースは返されません)。ここに挿入します(純粋に写真をアップロードします)してテキストフォーム部分を実行します。このとき、画像アドレスはパラメータとして渡されるため、テキストと一緒にデータベースに挿入できます。データは 1 つだけです。
アイデアを提供してくれた 2 人のモデレーターに感謝します