2015-07-08 3 views
0

У меня есть страница, на которой посетитель может загрузить файл, но это не требуется, поэтому в моем скрипте я ставлю условие, если входной файл (я назвал его «upload») не установлен или пустой ничего не загружать, а имя файла будет равно «файлу», уже существующему в db; иначе загрузите его. проблема в том, что условие не работает; даже когда я оставляю вход пустой, выполняется сценарий загрузки; я знаю, потому что я получаю сообщение, которые заявлены в сценарии здесь кодированные и спасибоphp upload file condition not working

//select exercice 
$ex_query = mysqli_query($link, " SELECT * FROM exercices WHERE ID = '".$exercice_ID."' "); 
$exercice = mysqli_fetch_assoc($ex_query); 
// --- update script if post 
if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
    if (isset($_FILES["upload"]) && !empty($_FILES["upload"])){ 
     $target_dir = "docs/"; 
     $date_f_n = date("Y-m-d_h-i-sa"); 
     $file_n = basename($_FILES["upload"]["name"]); 
     $file_n = $date_f_n.$file_n; 
     $target_file = $target_dir . $file_n; 
     $uploadOk = 1; 
     $FileType = pathinfo($target_file,PATHINFO_EXTENSION); 
     // Check if file is a actual image or fake image 
      $check = filesize($_FILES["upload"]["tmp_name"]); 
      if($check !== false) { 
       $uploadOk = 1; 
      } else { 
       $filesizeer = "File is not an image."; 
       $uploadOk = 0; 
      } 
     // Check file size 
     if ($_FILES["upload"]["size"] > 5000000) { 
      $filesizeer = "Sorry, your file is too large."; 
      $uploadOk = 0; 
     } 
     // Check if $uploadOk is set to 0 by an error 
     if ($uploadOk == 0) { 
      $error = "Sorry, your file was not uploaded."; 
     // if everything is ok, try to upload file 
     } else { 
      if (move_uploaded_file($_FILES["upload"]["tmp_name"], $target_file)) { 
      $upsuccess= "The file ". $file_n. " has been uploaded."; 
      } else { 
       $upfaled = "Sorry, there was an error uploading your file."; 
      } 
     }//end else upload = 0 
    }else{ 
     $file_n = $exercice['file']; 
    } 

ответ

0

ПЕРВОГО, что вы должны делать с загрузкой, это проверить, если загрузка была выполнена ВООБЩЕ , и что это удалось. Просто потому, что существует $_FILES['foo'], не означает, что загрузка этого файла foo на самом деле преуспела.

Bare минимальная проверка:

if ($_FILES['foo']['error'] !== UPLOAD_ERR_OK) { 
    die("Upload failed with error code #" . $_FILES['foo']['error']); 
} 

или даже

if (isset($_FILES['foo']) && etc...) 

, если вы действительно хотите быть строго правильным.

Если вы хотите разрешить не загружать, но все равно не выполняете настоящие ошибки, тогда проверьте конкретные коды ошибок, которые вы хотите разрешить, как «ok». Коды ошибок определены здесь: http://php.net/manual/en/features.file-upload.errors.php