【问题标题】:Undefined index: file未定义索引:文件
【发布时间】:2011-08-31 04:38:59
【问题描述】:

我第一次进入上传表单页面时遇到未定义索引错误,或者如果我移至下一页并单击后退按钮,则会收到相同的错误消息。 如果我上传一个文件,那么它工作正常并且错误消息消失了。

我也试过这个:

global $file;
if (!isset($file)) {
    $file = '';
}

这是我的代码:

<form id="uploadForm" name="upload" enctype="multipart/form-data"/>
  <fieldset>
    <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
    <input type="file" name="file" />
<?php
echo '<pre>';
var_dump($_REQUEST['file']);
echo '</pre>';

$uploaded = new upload;
//set Max Size
$uploaded->set_max_size(350000);
//Set Directory
$uploaded->set_directory("data");
//Set Temp Name for upload.
$uploaded->set_tmp_name($_FILES['file']['tmp_name']);
//Set file size
$uploaded->set_file_size($_FILES['file']['size']);
//set file type
$uploaded->set_file_type($_FILES['file']['type']);
//set file name
$uploaded->set_file_name($_FILES['file']['name']);
//start copy process
$uploaded->start_copy();
if($uploaded->is_ok()) 
    echo " upload is doen.";
else
    $uploaded->error()."<br>";
?>
    <div class="filesize">JPG minimaal 800x60 pixels max. 2Mb</div>
    <a href="" class="submit" title="Upload your own phooto"><span> Upload your own photo </span></a>

上传_inc.php

<?
class upload
{
    var $directory_name;
    var $max_filesize;
    var $error;

    var $user_tmp_name;
    var $user_file_name;
    var $user_file_size;
    var $user_file_type;
    var $user_full_name;

    function set_directory($dir_name =".")
    {
        $this->directory_name = $dir_name;
    }

    function set_max_size($max_file = 2000000)
    {
        $this->max_filesize = $max_file;
    }

    function error()
    {
        return $this->error;
    }

    function is_ok()
    {
        if(isset($this->error))
            return FALSE;
        else
            return TRUE;
    }

    function set_tmp_name($temp_name)
    {
        $this->user_tmp_name = $temp_name;
    }

    function set_file_size($file_size)
    {
         $this->user_file_size = $file_size;
    }

    function set_file_type($file_type)
    {
        $this->user_file_type = $file_type;
    }

    function set_file_name($file)
    {
        $this->user_file_name = $file;
        $this->user_full_name = $this->directory_name."/".$this->user_file_name;
    }

    function start_copy()
    {
        if(!isset($this->user_file_name))
            $this->error = "You must define filename!";
        if ($this->user_file_size <= 0)
            $this->error = 'File size error (0):' . $this->user_file_size . 'KB <br>';
        if ($this->user_file_size > $this->max_filesize)
            $this->error = 'File size error (1):' . $this->user_file_size . 'KB<br>';
        if($this->user_file_type != "image/jpeg")
            $this->error = "the image must be jpeg extension";
        if (!isset($this->error))
        {
            $filename = basename($this->user_file_name);
            if (!empty($this->directory_name))
                $destination = $this->user_full_name;
            else
                $destination = $filename;
            if(!is_uploaded_file($this->user_tmp_name))
                $this->error = "File " . $this->user_tmp_name . " is not uploaded correctly.";
            if (!move_uploaded_file ($this->user_tmp_name,$destination))
                $this->error = "Impossible to copy " . $this->user_file_name . " from your folder to destination directory.";
        }
    }

}
?>

【问题讨论】:

  • 感谢精彩的描述性标题。

标签: php oop


【解决方案1】:

错误可能在您的上传类中。错误消息非常清楚,如果这是您收到的实际消息,那么该类中的某处可能有一行查找名为“fileUpload”的数组键 I。

只需在您的代码中搜索“fileUpload”,然后添加一些内容来检查密钥是否已设置,即

 if(isset($arraywhatever['fileUpload'])) condition to your code.

【讨论】:

  • 实际错误是:未定义索引:第 71 行 /var/www/www.test.org/site/step5.php 中的文件。它无法识别 [file] 并显示错误我有 [file] 我输入的名称的所有行。你能帮忙吗
  • 只做vardump($_REQUEST);在 print_r($_FILES['file']);这将向您显示所有设置的 $_POST 变量。此外,如果表单标签中的 uneeded action="" 是向自身发布的,请删除它,并确保您的字段集标签已关闭。我不认为你发布了整个脚本,所以很难看出哪里出了问题。
  • 我得到了同样的错误消息未定义索引:文件在 /var/www/www.test.org/site/step5.php 第 71 行
  • 我已将所有 mijn 两页代码复制到我的原始 msg 中。有两个页面upload_inc.php & form.php
【解决方案2】:

"Undefined index" 表示您正在尝试读取一个不存在的数组元素。

您的具体问题似乎是您正在尝试读取尚不存在的上传数据:当您第一次访问上传表单时,没有 $_FILES 数组(或者更确切地说,里面什么都没有),因为表格还没有提交。但是由于您不检查表单是否已提交,因此这些行会为您带来错误:

//Set Temp Name for upload.
$uploaded->set_tmp_name($_FILES['file']['tmp_name']);
//Set file size
$uploaded->set_file_size($_FILES['file']['size']);
//set file type
$uploaded->set_file_type($_FILES['file']['type']);
//set file name
$uploaded->set_file_name($_FILES['file']['name']);

他们都试图读取$_FILES['file'] 的值以将它们传递给$uploaded 的方法。

你需要的是事先检查:

if (isset($_FILES['file'])) {
    $uploaded = new upload;
    //set Max Size
    $uploaded->set_max_size(350000);
    //Set Directory
    $uploaded->set_directory("data");
    //Set Temp Name for upload.
    $uploaded->set_tmp_name($_FILES['file']['tmp_name']);
    //Set file size
    $uploaded->set_file_size($_FILES['file']['size']);
    //set file type
    $uploaded->set_file_type($_FILES['file']['type']);
    //set file name
    $uploaded->set_file_name($_FILES['file']['name']);
    //start copy process
    $uploaded->start_copy();
    if($uploaded->is_ok()) 
        echo " upload is doen.";
    else
        $uploaded->error()."<br>";
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-14
    • 2014-04-29
    • 2013-10-02
    • 2012-12-08
    • 2012-09-18
    • 1970-01-01
    相关资源
    最近更新 更多