簡體   English   中英

訪問在類中的函數內聲明的變量(PHP)

[英]Accessing a variable declared within a function within a class (PHP)

我正在為一個網站的腳本工作,用戶可以在其中創建帳戶並上傳數據,以后可以由公眾搜索和訪問。 作為上載類的一部分,我具有一個重命名文件的功能,以便在我的上載目錄中沒有多個具有相同名稱的文件。 問題是我需要從類中獲取該重命名的文件值,以便可以將其放入mySQL數據庫的fileName部分。

實際上在類中起作用的函數的代碼:

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變量,該變量等於$ name的值(這是我需要的值),但是當我嘗試使用$ _POST [在我的主代碼中設置fileName列時, 'dream'],它返回一個頁面,顯示“ column fileName不能為null”。 在函數或類中設置超全局變量是否存在問題? 如果是這樣,我該怎么做才能從類中獲取$ 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']由隱藏字段中的表單啟動,但實際上未設置任何內容。 誰能幫我弄清楚這里出什么問題了嗎? 我是新來的。

在沒有看到完整的代碼流的情況下,我建議您從以下位置更改move()函數中的最后一行代碼:

$_POST['dream'] = $name;

至:

return $name;

然后捕獲返回值,如下所示:

$filename = $upload->move();

然后,更改此行:

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

至:

mysql_real_escape_string($filename),

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM