我正在使用下面的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>
供参考,以下是错误:
注意:未定义的变量:config in 第28行/Applications/MAMP/htdocs/files/classes.php
注意:未定义索引:文件输入 第34行/Applications/MAMP/htdocs/files/classes.php
答案 0 :(得分:0)
我非常希望你实际上没有处理这个:<input type="hidden" name="MAX_FILE_SIZE" value="2000000" />
另外,请使用global $config;
答案 1 :(得分:0)
我没有测试它,但这是我认为错的:
config.php
。您已将$config
传递给database
构造函数。 $_FILES
,这是一个遍布各处的超全球。我还建议您将您的班级名称大写。
<强>更新强>
很抱歉我现在不能把它们放在一起。我看到以下几个问题:
file
上没有$_FILES['file']
个密钥。不确定你要找的是哪个键。upload
上使用db方法。 $this->prepare
不是导致错误吗?该课程不会延长PDO
。也许你应该在db类中有上传方法。答案 2 :(得分:0)
public function __construct() {
global $config;
// Rest of the code here.
}
这不是一个很好的方法,但它应该有用。
答案 3 :(得分: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']));
不要将文件存储在数据库中并且过度杀伤。