2012-04-14 43 views
0

我正在爲用戶創建帳戶並上傳數據的網站的腳本工作,這些腳本稍後可以被公衆查找和訪問。作爲我的上傳類的一部分,我有一個函數來重命名文件,以便在我的uploads目錄中沒有多個同名的文件。問題是我需要從類中獲取重命名的文件值,以便將其放入mySQL數據庫的fileName部分。訪問在類中的函數內聲明的變量(PHP)

該函數的代碼確實在課堂上的工作:

class Ds1_Upload { 
protected $_uploaded = array(); 
protected $_destination; 
protected $_max = 10485760; 
protected $_messages = array(); 
protected $_permitted = array('audio/mpeg','audio/wav','audio/mpeg3','audio/x-mpeg-3'); 
protected $_renamed = false; 

public function __construct($path) { 
    if(!is_dir($path) || !is_writable($path)) { 
     throw new Exception("$path must be a valid, writable directory."); 
    } 
    $this->_destination = $path; 
    $this->_uploaded = $_FILES; 
} 


public function move($overwrite = false) { 
    $field = current($this->_uploaded); 
    $OK = $this->checkError($field['name'], $field['error']); 
    if($OK) { 
     $sizeOK = $this->checkSize($field['name'],$field['size']); 
     $typeOK = $this->checkType($field['name'], $field['type']); 
     if($sizeOK && $typeOK) { 
      $name = $this->checkName($field['name'], $overwrite); 
      $success = move_uploaded_file($field['tmp_name'], $this->_destination.$name); 

      if($success) { 

       $message = $field['name']. ' was uploaded successfully'; 
       if ($this->_renamed) { 
        $message .=" and renamed $name as a result of a conflicting filename in the Sleep Speak database."; 
       } 

       $this->_messages[] = $message; 
      } else { 
       $this->_messages[] = 'Could not upload ' . $field['name']; 
      } 
      $_POST['dream'] = $name; 
     } 
    } 
} 

正如你所看到的,我試圖讓它設置$ _POST變量等於爲$名稱的值(是我需要的值),但是當我嘗試使用$ _POST ['dream']在我的主代碼中設置fileName列時,它返回一個頁面,其中顯示「列fileName不能爲空」。在函數內或類內設置超全局變量是否存在問題?如果是這樣,我可以做些什麼來獲得$ name的價值,使其可以通過mySQL查詢訪問?

這裏是MySQL的代碼

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "fileupload")) { 
    $insertSQL = sprintf("INSERT INTO Dreams (fileName, userName, dreamName, tags,  uploadDate) VALUES (%s, %s, %s, %s, %s)", 
         GetSQLValueString($_POST['dream'], "text"), 
         GetSQLValueString($_POST['user'], "text"), 
         GetSQLValueString($_POST['title'], "text"), 
         GetSQLValueString($_POST['tags'], "text"), 
         GetSQLValueString($_POST['date'], "text")); 

    mysql_select_db($database_Sleep_Speak, $Sleep_Speak); 
    $Result1 = mysql_query($insertSQL, $Sleep_Speak) or die(mysql_error()); 


} 

所有其他的$ _POST值由提交表單設置。 $ _POST ['dreams']由隱藏字段的形式啓動,但實際上並未設置爲任何內容。任何人都可以幫我弄清楚這裏有什麼問題嗎?我是新來的。

回答

1

沒有看到代碼的完整流程,我會建議你中招()函數改變的代碼的最後一行:

$_POST['dream'] = $name; 

要:

return $name; 

,然後捕獲像這樣的返回值:

$filename = $upload->move(); 

然後,改變這一行:

GetSQLValueString($_POST['dream'], "text"), 

要:

mysql_real_escape_string($filename), 
相關問題