我正在爲用戶創建帳戶並上傳數據的網站的腳本工作,這些腳本稍後可以被公衆查找和訪問。作爲我的上傳類的一部分,我有一個函數來重命名文件,以便在我的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']由隱藏字段的形式啓動,但實際上並未設置爲任何內容。任何人都可以幫我弄清楚這裏有什麼問題嗎?我是新來的。