Я получаю неопределенную ошибку индекса, когда я впервые появляюсь на моей странице формы загрузки, или если я перехожу на следующую страницу и нажимаю кнопку «Назад», то у меня такое же сообщение об ошибке. Если я выгружаю файл, тогда он отлично работает и сообщение об ошибке уходит.
Я также пробовал это:
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."; } } } ?>
"Undefined index"
означает, что вы пытаетесь прочитать элемент массива, который не существует.
Ваша конкретная проблема заключается в том, что вы пытаетесь прочитать данные для загрузки, которых еще нет: при первом посещении формы загрузки нет массива $_FILES
(точнее, в нем нет ничего), потому что форма hasn не было представлено. Но так как вы не проверяете, была ли форма отправлена, эти строки выдают вам ошибку:
//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>"; }
Вероятно, ошибка в вашем классе загрузки. Сообщение об ошибке довольно ясно, если это фактическое сообщение, которое вы получаете, вероятно, есть строка где-то в этом классе, которая ищет ключ массива I, который называется «fileUpload».
Просто выполните поиск в вашем коде для «fileUpload» и добавьте что-нибудь, чтобы проверить, установлен ли ключ, т.е.
if(isset($arraywhatever['fileUpload'])) condition to your code.