2012-04-14 27 views
0

ユーザーがアカウントを作成してデータをアップロードできるサイトのスクリプトを作成しています。アップロードクラスの一環として、アップロードディレクトリに同じ名前のファイルが複数存在しないようにファイルの名前を変更する機能があります。問題は、名前を変更したファイル値をクラスから取り出して、mySQLデータベースのfileName部分にドロップできるようにすることです。クラス内の関数内で宣言された変数へのアクセス(PHP)

本当にクラスの仕事ん関数のコード:あなたが見ることができるように、私はそれが$名の値に等しいの$ _POST変数を設定するために

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 ['dream']を使用してメインコードのfileName列を設定しようとすると、 "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']は非表示フィールドのフォームから開始されますが、実際には何も設定されていません。誰でも私がここで何が間違っているのか理解できますか?私はこれに新しいです。

答えて

1

コードの完全な流れを見なければ、私はあなたからの移動()関数内のコードの最後の行を変更することを示唆している:に

$_POST['dream'] = $name; 

return $name; 

そしてキャプチャそのような戻り値:次に

$filename = $upload->move(); 

は、この行を変更します。

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

へ:

mysql_real_escape_string($filename), 
関連する問題