Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 未定义索引和未定义变量,但两者都已定义!(我想……)_Php_Html_Oop_Pdo - Fatal编程技术网

Php 未定义索引和未定义变量,但两者都已定义!(我想……)

Php 未定义索引和未定义变量,但两者都已定义!(我想……),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

我使用下面的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']));
        }
    }
}
<?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']));