0

Hey everyone I am getting the error "Undefined index: fileToUpload" twice and i cant seem to figure out why. The error is occurring where the //ERROR mark is. The Html form is included. Any Help would be appreciated.

<?php
$target_dir = "images/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); //ERROR 1
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["fileToUpload"]["name"]);
    if($check !== false) {
        echo "File is an image - " . $check["mime"] . ".";
        $uploadOk = 1;
    } else {
        echo "File is not an image.";
        $uploadOk = 0;
    }
}
// Check if file already exists
if (file_exists($target_file)) {
    echo "Sorry, file already exists.";
    $uploadOk = 0;
}
 // Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) { //ERROR 2
    echo "Sorry, your file is too large.";
    $uploadOk = 0;
 }
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
    echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
    $uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
    echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
    } else {
        echo "Sorry, there was an error uploading your file.";
    }
}

?>  
<h1>Upload</h1>
<form action="Upload.php" method="post" enctype="multipart/form-data">
    Select image to upload:
    <input type="file" name="fileToUpload" id="fileToUpload">
    <input type="submit" value="Upload Image" name="submit">
 </form>

3 Answers3

2

You need to check if form is submitted and then do all file upload check code inside it something like ..

  <?php
   $target_dir = "images/";// Check if image file is a actual image or fake image
   if(isset($_POST["submit"])) {
     $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); //ERROR 1
     $uploadOk = 1;
     $imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
     $check = getimagesize($_FILES["fileToUpload"]["name"]);
        if($check !== false) {
        echo "File is an image - " . $check["mime"] . ".";
        $uploadOk = 1;
        } else {
        echo "File is not an image.";
        $uploadOk = 0;
        }
    if (file_exists($target_file)) {
        echo "Sorry, file already exists.";
        $uploadOk = 0;
    }
     // Check file size
    if ($_FILES["fileToUpload"]["size"] > 500000) { //ERROR 2
        echo "Sorry, your file is too large.";
        $uploadOk = 0;
     }
    // Allow certain file formats
    if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
    && $imageFileType != "gif" ) {
        echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
        $uploadOk = 0;
    }
    // Check if $uploadOk is set to 0 by an error
    if ($uploadOk == 0) {
        echo "Sorry, your file was not uploaded.";
    // if everything is ok, try to upload file
    } else {
        if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
        } else {
        echo "Sorry, there was an error uploading your file.";
        }
    }
}
// Check if file already exists


?> 

Hope it helps !

Pardeep Poria
  • 1,049
  • 1
  • 7
  • 12
1

First you can check if the user has selected a file in the client side with javascript

$('form').on('submit',function(event){
    if( document.getElementById("fileToUpload").files.length == 0 ){
        alert("You must select a file");
        event.preventDefault();
    }
}) 

Then you can also check in your server sidde php code that the user actually submitted a file

if(!isset($_FILES["fileToUpload"]["name"])|| $_FILES["fileToUpload"]["size"] <1) exit();
George Pant
  • 2,079
  • 1
  • 9
  • 14
0

This is actually because $_FILES["fileToUpload"] variable/array was not set yet. You need to set it before going further. You can try it using a simple if statement.

if(isset($_FILES["fileToUpload"]))
{
 //your code
}
Ali Mohsan
  • 326
  • 2
  • 15