2011-05-23 83 views
1

我收到未定义的索引错误,因为我第一次来到我的上传表单页面,或者如果我移动到下一页并单击后退按钮,那么我具有相同的错误消息。 如果我上传一个文件,那么它工作正常,错误消息就会消失。未定义索引:文件

我也试过这样:

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> 

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

} 
?> 
+2

谢谢你的精彩和描述性标题。 – RobertPitt 2011-05-23 14:04:00

回答

5

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

heyyyy这是gr8工作感谢超过10000 – Mary 2011-05-24 08:51:39

1

该错误可能是上传类。错误信息非常清楚,如果那是你得到的实际消息可能是该类中某处寻找名为'fileUpload'的数组键的行。

只是做一个搜索中关于“文件上传”的代码,并添加了一些检查项设置,即

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

的实际错误是:未定义的索引:第71行中的/var/www/www.test.org/site/step5.php中的文件。它无法识别[文件],并显示所有行的错误[文件]我输入的名字。你可以帮助PLZ – Mary 2011-05-24 06:58:43

+0

只是做vardump($ _ REQUEST); print_r($ _ FILES ['file']);这会显示你所有的设置$ _POST变量。另外,如果它发布到自身并确保您的fieldset标记已关闭,则在表单标记中删除未取消的action =“”。我认为你没有发布整个剧本,所以很难看到有什么问题。 – stefgosselin 2011-05-24 07:33:56

+0

我得到了同样的错误信息未定义的索引:/var/www/www.test.org/site/step5.php 71行上的文件 – Mary 2011-05-24 07:44:26