0

私は、ユーザーがアカウントを作成してデータをアップロードできるサイトのスクリプトに取り組んでいます。データは、後で一般の人が検索してアクセスできます。アップロード クラスの一部として、アップロード ディレクトリに同じ名前のファイルが複数存在しないように、ファイルの名前を変更する機能があります。問題は、名前が変更されたファイルの値をクラスから取得して、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'] の場合、「列 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'] は非表示フィールドからフォームによって開始されますが、実際には何も設定されていません。ここで何が間違っているのかを理解するのを手伝ってくれる人はいますか? 私はこれが初めてです。

4

1 に答える 1

1

コードの完全なフローを見ることなく、move() 関数の最後のコード行を次のように変更することをお勧めします。

$_POST['dream'] = $name;

に:

return $name;

そして、次のように戻り値をキャプチャします。

$filename = $upload->move();

次に、次の行を変更します。

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

に:

mysql_real_escape_string($filename),
于 2012-04-14T14:37:44.903 に答える