2

我正在使用下面的 HTML 表单将文件传递给 PHP 进行处理。但是 PHP 说索引是未定义的。

同样,我在 config.php 中定义的变量显示为未定义。

我在这里想念什么?

类.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']));
        }
    }
}

配置文件

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

上传.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 中的配置

注意:未定义的索引:第 34 行 /Applications/MAMP/htdocs/files/classes.php 中的文件

4

4 回答 4

0

我非常希望你实际上并没有处理这个:<input type="hidden" name="MAX_FILE_SIZE" value="2000000" />

另外,使用global $config;

于 2012-07-20T03:41:02.873 回答
0

我没有测试它,但这是我认为是错误的:

  1. 不需要config.php类文件。您已经传递$configdatabase构造函数。
  2. 不要$_FILES在你的类上声明,它是一个随处可用的超全局。

我还建议您将班级名称大写。

更新

抱歉,我现在不能把它们全部放在一起。这是我看到的更多问题:

  1. 没有file钥匙$_FILES['file']。不确定您要查找的密钥。
  2. 您不能upload像现在一样在类上使用 db 方法。不会$this->prepare导致错误吗?该类不扩展PDO。也许你应该在 db 类中有上传方法。
于 2012-07-20T03:50:50.633 回答
0
public function __construct() {
    global $config;
    // Rest of the code here.
}

不完全是一个很好的方法,但它应该工作。

于 2012-07-20T04:25:35.330 回答
0

您在 classes.php 文件中再次包含 config.php

第二件事是执行的最后一个参数,文件内容存储在 $_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 回答