ホームページ > バックエンド開発 > PHPチュートリアル > 気の毒だと思う!神様に質問してみます。渡されたget値を取得できません

気の毒だと思う!神様に質問してみます。渡されたget値を取得できません

WBOY
リリース: 2016-06-23 14:16:54
オリジナル
916 人が閲覧しました

この投稿の最終編集者は Eason_____________ 、2013-07-25 16:41:04

データベース

// 現在の問題は、ファイルがアップロードされていない場合、テキストのみがアップロードされることです。 $_GETの値を取得できます。ファイルがアップロードされている場合は取得できません。具体的なコードについては以下を参照してください。値を渡すjsonです。

//html

rree


//index.php

<!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://localhost/json/bbs/index.php";        function setLog(msg){                document.getElementById("msgid").innerHTML = msg;        }        function upload(){				if($$("fb-title").value!='' && $$("fb-content").value!='' && document.getElementById("showPic").src==""){					var fbtitle = $$("fb-title").value;					var fbcontent = $$("fb-content").value;					var url = 'http://localhost/json/bbs/index.php?title='+fbtitle+'&content='+fbcontent+"&imgshows=none";					$.getJSON(url,function(data){					});					return false;				}else if($$("fb-title").value!='' && $$("fb-content").value!='' && document.getElementById("showPic").src!=""){					uexUploaderMgr.createUploader(1,uploadHttp);				}else{					alert("标题或内容不能为空!");					}        }        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);												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){																			});                                                //uexWindow.closeToast();//关闭提示消息框                                                uexUploaderMgr.closeUploader(1);                                                break;                                        case 2:                                                uexWindow.closeToast();//关闭提示消息框                                                uexWindow.toast(0,5,"出错啦~",2000);                                                uexUploaderMgr.closeUploader(1);                                                break;                        }                                        }        }</script></html>
ログイン後にコピー



回复讨论(解决方案)


//uploadImage.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=''; 
プライベート $imagePathTemp = "";
プライベート $destination_folder; 
プライベート $imageName; 
プライベート $fileArray;
プライベート $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(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->gt;imageStauts === 1){
$this->gt;imageStauts = 'ファイルが大きすぎます' }
; MIME タイプを確認してください
if(!in_array(strto lower($file['type']), $this->uptypes) && $this->imageStauts === 1){
$this->imageStauts = ' サポートされていません '。 File [' Type '].' Type file ';
*/
// 画像メタッドデータのコメントフィールドに pHP コードが含まれないようにします
// pathinfo($this->fileArray['name']);
$fileType = strto lower($fileInfo['extension']);
if(!in_array($fileType, $this->imageType) && $this- >imageStats === 1){
$this-> imageSauts = '.$fileType タイプのファイルはサポートされていません'; ->imageStauts === 1){
mkdir($this->destination_folder,0777);//ファイルのアクセス許可を設定します
}
}
/**
*
* 画像のアップロードを開始します
*/
function doWork(){

$ fileName = $this->fileArray['tmp_name'];
$fileSize = getimagesize($fileName);
$fileInfo = pathinfo( $this->fileArray['name']);
$fileType = strto lower($ fileInfo['extension']);
$n = !empty($this->imageName) : time();
$destination = $this->destination_folder.$n.'.$fileType;//画像のローカル パス
$this->imagePathTemp = $this->gt;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 を返します
*/
関数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 1;
}

}

同じ問題ですか?
変更した写真をアップロードできないのはなぜですか?

まだ同じ問題がありますか?
変更した写真をアップロードできないのはなぜですか?

写真をアップロードしてデータベースに書き込むことができるようになりました。つまり、一緒にアップロードされたファイルと写真がある場合です。
$_GET の値を取得できません

まだ同じ問題がありますか?
変更した写真をアップロードできないのはなぜですか?

授業に問題はありますか?
現在のプロセスは次のとおりです:
値がテキストをアップロードする場合、それをデータベースに直接挿入します。
テキスト付きの写真をアップロードする場合は、写真がアップロードされるまで待ってからデータベースに挿入してください。

if($i->imageStauts == 1) 画像のアップロードが完了したかどうかを判断します

まず、コードが if ブロックに到達しているかどうかを確認します。このブロックに到達していない場合は、どうやって値を知ることができます。わかりますか?
if($i->imageStauts == 1){
echo "aaaaaa"; }

また、コードは前のコードとは異なります。
$i->doWork();
$i->imageCheck();
これらのロジックはもう必要ありませんか?

まず、コードが if ブロックに到達したかどうかを確認します。このブロックに到達していない場合、get の値が取得されていないことはどのようにしてわかりますか?

if($i->imageStauts == 1){
echo "aaaaaa"; }

また、コードは前のコードとは異なります。
$i->doWork();
$i->imageCheck();
これらのロジックはもう必要ありませんか?

$i->imageStart();
$i->doWork();
if($i->imageStauts == 1)
を置き換えることができますいつでもデータベースに挿入できます。
画像アドレスはデータベースに挿入できますが、get で取得した値はデータベースに挿入できません




低レベルのエラー
if($i-> imageStauts == 1)
は Status です。

public $imageStauts = 1 ;


これも私のクラスで書かれています

低レベルのエラー

if($i-> imageStauts == 1)
はステータスです
public $imageStauts = 1;私のクラスにも書かれています

低レベルエラー
if($i-> imageStauts == 1)
はステータスです

写真をアップロードしても get を取得できない場合、理由がわかりません。価値がある場合は、写真をアップロードしないでください。 。 。 。 。

低レベルのエラー
if($i-> imageStauts == 1)
is Status
public $imageStauts = 1;

私もクラスでこのように書きました

...間違いを犯しました。 。

低レベルのエラー
if($i->gt; imageStauts == 1)
は Status です

この判断を追加しなければ if($i->gt;imageStauts == 1) を取得できますvalue

デバッグの追加 :

else{
echo "to else";
echo "to status";
$sql="insert into json_bbsvalues('', '".$gettitle ."','".$getcontent."','','".time()."','')";
mysql_query($sql);

}

}

次にどのブロックが問題なのかを見てください。


低レベルのエラー
if($i-> imageStauts == 1)
はステータスです

この判断を追加しない場合、if($i->gt;imageStauts == 1) はget value

そうではありません。値は取得されませんでしたが、imageStauts は 1 に等しくなく、このコード ブロックにはまったく到達しませんでした。




低レベルのエラー
if($i-> imageStauts == 1)
は Status です

この判断を追加しない場合、 if($i->imageStauts == 1) は次のようになります。値を取得します

値が取得されないのではなく、imageStauts が 1 に等しくなく、このコード ブロックにまったく到達しません。

しかし、私は $sql="insert into json_bbsvalues('',' ".$gettitle."',' ".$getcontent."','','".time()."','' としました。 )"; 赤い部分を任意の文字に置き換えると、データベースに挿入できます

if($i->imageStauts == 1) このステップはパスされます。

これはキャンセルされた値の取得です:



これは取得値です




一个低级错误
if($i-> imageStauts == 1)
是Status

如果不加这个判断 if($i->imageStauts == 1) 就能得到get值

那不是没得到值,而是imageStauts不等于1,根本就没有走到这个代码块。

但是我把 $sql="insert into json_bbs values('',' ".$gettitle."',' ".$getcontent."','','".time()."','')"; 加红的地方换成 随便什么字符 就能插入到数据库
先把调试代码加上,sql也echo出来,看看结果。

先把调试代码加上,sql也echo出来,看看结果。

结果在上面。

就是说图片还是可以上传的了,对吧?

你的文字和图片是分别上传的,所以你的接收程序被执行了两次
一次是只有 get 过来的文字数据
一次是只有 upload 过来的图片
你需要做到的是:能识别这两次数据是来自同一浏览器的同一次提交(看代码图片是在提交的时候选择的,对吧?)
嗯,你的 uexUploaderMgr.createUploader(1,uploadHttp); 放错位置了,原来是对的

为了识别是来自同一浏览器,你可以使用 cookie 最好是 session 方便记录状态
为了识别是来自同一次提交,你可以在 url 上附加序号
大致是这个样子

var uploadHttp = "http://localhost/json/bbs/index.php";var num = 0;function upload(){  var url = uploadHttp + '?t=' + num;   if($$("fb-title").value!='' && $$("fb-content").value!='' && document.getElementById("showPic").src==""){    uexUploaderMgr.createUploader(1,url);    var fbtitle = $$("fb-title").value;    var fbcontent = $$("fb-content").value;    url += '&title='+fbtitle+'&content='+fbcontent+"&imgshows=none";    $.getJSON(url,function(data){      });....
ログイン後にコピー
ログイン後にコピー


session_start();if(isset($_SESSION['t']) && $_SESSION['t'] == $_GET['t']) {  //同一次提交  //根据传入的数据,修改数据库}else {  $_SESSION['t'] = $_GET['t'];  //根据传入的数据,插入数据库  $_SESSION['last'] = 上一次插入的 id ,用作修改是的凭据}
ログイン後にコピー
ログイン後にコピー

就是说图片还是可以上传的了,对吧?

你的文字和图片是分别上传的,所以你的接收程序被执行了两次
一次是只有 get 过来的文字数据
一次是只有 upload 过来的图片
你需要做到的是:能识别这两次数据是来自同一浏览器的同一次提交(看代码图片是在提交的时候选择的,对吧?)
嗯,你的 uexUploaderMgr.createUploader(1,uploadHttp); 放错位置了,原来是对的

为了识别是来自同一浏览器,你可以使用 cookie 最好是 session 方便记录状态
为了识别是来自同一次提交,你可以在 url 上附加序号
大致是这个样子

var uploadHttp = "http://localhost/json/bbs/index.php";var num = 0;function upload(){  var url = uploadHttp + '?t=' + num;   if($$("fb-title").value!='' && $$("fb-content").value!='' && document.getElementById("showPic").src==""){    uexUploaderMgr.createUploader(1,url);    var fbtitle = $$("fb-title").value;    var fbcontent = $$("fb-content").value;    url += '&title='+fbtitle+'&content='+fbcontent+"&imgshows=none";    $.getJSON(url,function(data){      });....
ログイン後にコピー
ログイン後にコピー


session_start();if(isset($_SESSION['t']) && $_SESSION['t'] == $_GET['t']) {  //同一次提交  //根据传入的数据,修改数据库}else {  $_SESSION['t'] = $_GET['t'];  //根据传入的数据,插入数据库  $_SESSION['last'] = 上一次插入的 id ,用作修改是的凭据}
ログイン後にコピー
ログイン後にコピー


这样子不行,图片和文字 是一起上传的  
if($$("fb-title").value!='' && $$("fb-content").value!='' && document.getElementById("showPic").src=="")//这个是判断有没有图片 这个是没有图片 直接就插入数据库了
if($$("fb-title").value!='' && $$("fb-content").value!='' && document.getElementById("showPic").src!="")//这个是有图片的 有图片 就执行上传图片的操作。

执行了图片的操作后,
if($i->imageStauts == 1) 判断图片是否是完成了上传。

如果完成了上传,就把文字和图片一起插入数据库,不是分开执行的。

现在就是 if($i->imageStauts == 1){ 在这里面不能获取GET的值。 如果把 $_GET['title']换成随便什么字符都行}

要怎么说你才能明白是分两次上传的呢?
这是上传文字,get方式,不可能上传文件。上传文件至少需要是post方式
$.getJSON(url,function(data){
 
这是创建一个上传组件,没有表单只能用组件上传
uexUploaderMgr.createUploader(1,uploadHttp);

补充一下
正因为是分作两次提交的,所以才会有你另一个帖子中的两条记录的问题

应该说这现在的代码远没有你另一帖的代码合理

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート