2

以下のHTMLフォームを使用して、処理のためにファイルをPHPに渡します。しかし、PHPは、インデックスが未定義であると言っています。

また、同様に、config.phpで定義した変数が未定義として表示されます。

ここで何が欠けていますか?

classes.php

<?php
require('config.php');
error_reporting(E_ALL);
/*
 * Classes required by the script
 * 
 */

class database extends PDO
{
    public $conURL;

    public function __construct($config) {
        $conURL = "mysql:host=" . $config['host'] . ";dbname=" . $config['db'];
        try {
         parent::__construct($conURL, $config['user'], $config['pass']);
        } catch (PDOException $e) {
            $e->getMessage();
        }
    }       
}

class upload
{
    public $_FILES;

    public function uploadFile() {
        if ($_FILES['file']['size'] >= 2000000) {
           echo "File is too large!";
        }
        elseif (isset($_FILES['file'])) {
           $stmt = $this->prepare("INSERT INTO upload (name, type, size, content) VALUES (?, ?, ?, ?)");
           $stmt->execute(array($_FILES['file']['name'], $_FILES['file']['type'], $_FILES['file']['size'], $_FILES['file']['file']));
        }
    }
}

config.php

<?php
$config = array(
        'host' => 'localhost', // db host
        'user' => 'root', // db user
        'pass' => 'mypassword', //db pass
        'db' => 'files' // db name
);

upload.php

<?php
error_reporting(E_ALL);
require('config.php');
require('classes.php');

$dbh = new database($config);
$upload = new upload();
$upload->uploadFile();

HTMLフォーム

<form name="uploaddb" action="upload.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="2000000" />
<input type="file" name="file" />
<br/>
<input type="submit" name="submit" value="Upload!" />
</form>

参考までに、エラーは次のとおりです。

注意:未定義の変数:28行目の/Applications/MAMP/htdocs/files/classes.phpのconfig

注意:未定義のインデックス:34行目の/Applications/MAMP/htdocs/files/classes.phpにあるファイル

4

4 に答える 4

0

config.phpをclasses.phpファイルに再度含めます

2つ目は、executeの最後の引数です。ファイルの内容は、$_FILESにファイルインデックスがない状態で保存されます。

 $_FILE['file']['tmp_name']


 $stmt->execute(array($_FILES['file']['name']
 , $_FILES['file']['type'], $_FILES['file']['size'], $_FILES['file']['tmp_name']));

データベースにファイルを保存しないでください。

于 2012-07-20T05:12:34.260 に答える
0

私はそれをテストしませんでしたが、ここに私が間違っていると思うものがあります:

  1. config.phpクラス ファイルでは必要ありません。あなたはすでにコンストラクタに渡し$configています。database
  2. $_FILESクラスで宣言しないでください。どこでも利用できるスーパーグローバルです。

また、クラス名を大文字にすることをお勧めします。

アップデート

申し訳ありませんが、現在すべてをまとめることができません。ここに私が見るさらにいくつかの問題があります:

  1. fileキーがありません$_FILES['file']。探しているキーがわからない。
  2. 現在のように、クラスで db メソッドを使用することはできませんupload$this->prepareエラーになっていませんか?そのクラスは拡張されませんPDO。おそらく、db クラス内にアップロード メソッドが必要です。
于 2012-07-20T03:50:50.633 に答える
0

あなたが実際にこれを処理していないことを心から願っています:<input type="hidden" name="MAX_FILE_SIZE" value="2000000" />

また、global $config;

于 2012-07-20T03:41:02.873 に答える
0
public function __construct() {
    global $config;
    // Rest of the code here.
}

それを行うのに最適な方法ではありませんが、うまくいくはずです。

于 2012-07-20T04:25:35.330 に答える