抱歉!在問大神們一個問題。不能擷取到傳過來的get值

來源:互聯網
上載者:User
本帖最後由 Eason_____________ 於 2013-07-25 16:41:04 編輯

資料庫

//現在的問題是如果沒有上傳檔案,只上傳 文字。 就能擷取到$_GET的值。如果上傳了檔案 就不能擷取。 具體代碼請看下面。是json傳值。

//html

                                                                                                                                                     x                        添加圖片        發布                                                           從手機相簿選擇                                                                                        拍照                                                                                       取消                                     



//index.php

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 < $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 : 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 ,用作修改是的憑據}


這樣子不行,圖片和文字 是一起上傳的
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);

補充一下
正因為是分作兩次提交的,所以才會有你另一個文章中的兩條記錄的問題

應該說這現在的代碼遠沒有你另一帖的代碼合理

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.