Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
460 views
in Technique[技术] by (71.8m points)

php - Undefined index: file

I am getting the undefined index error as I come for the first time in my upload form page or if I move to next page and click on back button then I have the same error message. If I upload a file then it works fine and the error message gets away.

I have also tried this:

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

Here is my code:

<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>

upload_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.";
        }
    }

}
?>
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

"Undefined index" means you're trying to read an array element that doesn't exist.

Your specific problem seems to be that you're trying to read upload data that doesn't exist yet: When you first visit your upload form, there is no $_FILES array (or rather, there's nothing in it), because the form hasn't been submitted. But since you don't check if the form was submitted, these lines net you an error:

//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']);

They're all trying to read the value of $_FILES['file'] to pass them to the methods of $uploaded.

What you need is a check beforehand:

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>";
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...