Home > Article > Backend Development > 抱歉!在问大神们一个问题。不能获取到传过来的get值
数据库
//现在的问题是如果没有上传文件,只上传 文字。 就能获取到$_GET的值。如果上传了文件 就不能获取。 具体代码请看下面。是json传值。<!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="max-width:90%" src="" id="showPic" / alt="抱歉!在问大神们一个问题。不能获取到传过来的get值" > </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>
<?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';$i = new uploadImage($_FILES['filename'],'./img/');$i->imageStart(); $gettitle=$_GET['title'];$getcontent=$_GET['content'];if($_GET['imgshows']=='none'){//如果没有文件 就执行这一句 $sql="insert into json_bbs values('','".$gettitle."','".$getcontent."','','".date()."','')"; mysql_query($sql);}else{ if($i->imageStauts == 1){//有文件 就执行这一句//就是这里获取不到值 $sql="insert into json_bbs values('','".$gettitle."','".$getcontent."','','".time()."','')"; mysql_query($sql); }}?>
//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='';
private $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(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 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 : time();
$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;
}
}
}
?>
还是那个问题?
怎么改的图片不能上传了?
还是那个问题?
怎么改的图片不能上传了?
现在图片能上传了,也能写入数据库了。 就是 如果有文件和图片一起上传的话。
就获取不到$_GET的值
还是那个问题?
怎么改的图片不能上传了?
是类有问题吗?
现在的过程是:
如果值上传文字的话, 就直接插入数据库。
如果上传了有文字图片的话,等图片上传完成然后在执行插入数据库的操作。
if($i->imageStauts == 1) 这个是判断图片是否上传完成的
先确认代码是否走到了这个if块中,如果都没到这个块中,你怎么知道get的值没取到呢?
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();
$i->imageCheck();
if($i->imageStauts == 1)
能走
都能插入数据库。
图片地址,都能插入数据库,就是get获取的值 不能插入到数据库,
一个低级错误
if($i-> imageStauts == 1)
是Status
public $imageStauts = 1;
我类里面也是这样写的
一个低级错误
if($i-> imageStauts == 1)
是Status
public $imageStauts = 1;
我类里面也是这样写的
一个低级错误
if($i-> imageStauts == 1)
是Status
就是找不到原因,如果上传图片 始终都获取不到get的值 不上传图片就行。。。。。
一个低级错误
if($i-> imageStauts == 1)
是Status
public $imageStauts = 1;
我类里面也是这样写的
...是看走眼了。。
一个低级错误
if($i-> imageStauts == 1)
是Status
如果不加这个判断 if($i->imageStauts == 1) 就能得到get值
加上调试:
else{
echo "to else";
if($i->imageStauts == 1){
echo "to status";
$sql="insert into json_bbs values('','".$gettitle."','".$getcontent."','','".time()."','')";
mysql_query($sql);
}
}
然后看看是哪块的问题。
一个低级错误
if($i-> imageStauts == 1)
是Status
如果不加这个判断 if($i->imageStauts == 1) 就能得到get值
那不是没得到值,而是imageStauts不等于1,根本就没有走到这个代码块。
一个低级错误
if($i-> imageStauts == 1)
是Status
如果不加这个判断 if($i->imageStauts == 1) 就能得到get值
那不是没得到值,而是imageStauts不等于1,根本就没有走到这个代码块。
但是我把 $sql="insert into json_bbs values('',' ".$gettitle."',' ".$getcontent."','','".time()."','')"; 加红的地方换成 随便什么字符 就能插入到数据库
if($i->imageStauts == 1) 这一步是通过了的。
这个是取消了get值 随便输入的字符:
这个是取的get值
一个低级错误
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 ,用作修改是的凭据}
要怎么说你才能明白是分两次上传的呢?
这是上传文字,get方式,不可能上传文件。上传文件至少需要是post方式
$.getJSON(url,function(data){
这是创建一个上传组件,没有表单只能用组件上传
uexUploaderMgr.createUploader(1,uploadHttp);
补充一下
正因为是分作两次提交的,所以才会有你另一个帖子中的两条记录的问题
应该说这现在的代码远没有你另一帖的代码合理