Php 未定义索引和未定义变量,但两者都已定义!(我想……)
我使用下面的HTML表单将一个文件传递给PHP进行处理。但是PHP说索引是未定义的 同样,我在config.php中定义的变量显示为未定义 我错过了什么 classes.phpPhp 未定义索引和未定义变量,但两者都已定义!(我想……),php,html,oop,pdo,Php,Html,Oop,Pdo,我使用下面的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; publi
<?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
error_reporting(E_ALL);
require('config.php');
require('classes.php');
$dbh = new database($config);
$upload = new upload();
$upload->uploadFile();
我非常希望您没有真正处理此问题:
另外,使用global$config代码>我非常希望您没有实际处理此问题:
另外,使用global$config代码>我没有测试它,但以下是我认为错误的地方:
在类文件上不需要config.php
。您已经将$config
传递给数据库
构造函数李>
不要在类上声明$\u文件
,它是一个无处不在的超全局文件
我还建议您将类名大写
更新
很抱歉,我现在不能把它全部放在一起。我发现还有几个问题:
$\u文件['file']
上没有文件
键。不确定你要找的是哪把钥匙
您不能像现在这样在类上传上使用db方法。$this->prepare
是否导致错误?该类不扩展PDO
。也许你应该在db类中有upload方法
我没有测试它,但以下是我认为错误的地方:
在类文件上不需要config.php
。您已经将$config
传递给数据库
构造函数李>
不要在类上声明$\u文件
,它是一个无处不在的超全局文件
我还建议您将类名大写
更新
很抱歉,我现在不能把它全部放在一起。我发现还有几个问题:
$\u文件['file']
上没有文件
键。不确定你要找的是哪把钥匙
您不能像现在这样在类上传上使用db方法。$this->prepare
是否导致错误?该类不扩展PDO
。也许你应该在db类中有upload方法
这并不是一个很好的方法,但它应该是有效的
这并不是一个很好的方法,但它应该可以工作。您将在classes.php文件中再次包含config.php
第二件事是execute的最后一个参数,文件内容存储在
$\u文件中没有文件索引
$_FILE['file']['tmp_name']
$stmt->execute(array($_FILES['file']['name']
, $_FILES['file']['type'], $_FILES['file']['size'], $_FILES['file']['tmp_name']));
不要将文件存储在其数据库中,否则会造成过度杀戮。您将在classes.php文件中再次包含config.php
第二件事是execute的最后一个参数,文件内容存储在
$\u文件中没有文件索引
$_FILE['file']['tmp_name']
$stmt->execute(array($_FILES['file']['name']
, $_FILES['file']['type'], $_FILES['file']['size'], $_FILES['file']['tmp_name']));
不要将文件存储在其数据库中,这会导致过度杀戮。LOL。我不是,您可以看到上面的所有代码。有人告诉我,全球化变量是不好的。如果变量超出范围,有时你必须这样做。但是,由于您只在类文件中使用它,所以应该没有明显的冲突。您将它放在了哪里?类的内部还是外部?我把它放在config.php中,变量本身就是在这里定义的。@Dustin:它需要在数据库的构造中才能做任何有用的事情。LOL。我不是,你可以看到上面所有的代码。有人告诉我,全球化变量是不好的。如果变量超出范围,有时你必须这样做。但是,由于您只在类文件中使用它,所以应该没有明显的冲突。您将它放在了哪里?类的内部还是外部?我把它放在config.php中,变量本身就是在这里定义的。@Dustin:它需要在数据库的构造中才能做任何有帮助的事情。我现在将它们大写。谢谢其余错误与此部分有关:$\u FILES['file']['file']。我不知道应该用什么变量替换它,以便将上传的文件插入数据库。谢谢。事实证明,如果我将$_文件['file']['file']替换为$_文件['file'],则数据将插入数据库,但我会收到关于数组到字符串转换的通知。我现在将它们大写。谢谢其余错误与此部分有关:$\u FILES['file']['file']。我不知道应该用什么变量替换它,以便将上传的文件插入数据库。谢谢。事实证明,如果我将$_文件['file']['file']替换为$_文件['file'],数据将插入数据库,但我会收到一个关于数组到字符串转换的通知。在数据库中存储文件不是一个好的做法。在数据库中存储文件的url并将文件保存到硬盘。在数据库中存储文件不是一个好做法。在数据库中存储文件的url并将文件保存到硬盘。
$_FILE['file']['tmp_name']
$stmt->execute(array($_FILES['file']['name']
, $_FILES['file']['type'], $_FILES['file']['size'], $_FILES['file']['tmp_name']));