peace_love
peace_love

Reputation: 6471

How can I get an error message when no file is selected in my file uploader?

This is my file uploader:

    <form action="done.php" method="post" enctype="multipart/form-data">
            <input type="file" name="file">
            <button type="submit" value="upload">Upload</button>
    </form> 

This is what happens now:

If I do not select any file and I click on "submit", I will be redirected to the done.php.

What I need:

If there is no file selected and I click on submit, I want to stay on my site and get an error messagage "No file selected".

done.php:

    if(isset($_FILES['file'])) {

                        $file = $_FILES['file'];
                        $target_file = 'files/'.basename($_FILES["file"]["name"]);

                        $filename = $target_file;

                        if (file_exists($target_file)) {
                              echo "file already existes";
                        } 
                        else {   
                        move_uploaded_file($_FILES["file"]["tmp_name"], $target_file);
                        }
     }

I updated my code now like Florian suggested:

done.php:

    if(isset($_FILES['file'])) {

                        $file = $_FILES['file'];
                        $target_file = 'files/'.basename($_FILES["file"]["name"]);

                        $filename = $target_file;

                        if (file_exists($target_file)) {
                              echo "file already existes";
                        } 
                        else {   
                        move_uploaded_file($_FILES["file"]["tmp_name"], $target_file);
                        }
    }
    else {
                        echo 'No file selected. <a href="upload.html">Back to upload form</a>';
    }

What happens now is, when I do not select any file I get the error message: "file already exists". I do not understand why.

Upvotes: 1

Views: 3268

Answers (5)

Florian
Florian

Reputation: 2874

Extend your done.php as follow:

if(!file_exists($_FILES['file']['tmp_name']) || !is_uploaded_file($_FILES['file']['tmp_name'])) {
    $file = $_FILES['file'];
    $target_file = 'files/'.basename($_FILES["file"]["name"]);
    $filename = $target_file;

    move_uploaded_file($_FILES["file"]["tmp_name"], $target_file);
} else {
    echo 'No file selected. <a href="./upload.html">Back to upload form</a>';
    // maybe you want to include the upload form here or do something else
}

Upvotes: 2

websky
websky

Reputation: 3172

    <html>
<body>
<script>
function unlock(){
    document.getElementById('buttonSubmit').removeAttribute("disabled");
}
</script>
<form action="done.php" method="post" enctype="multipart/form-data">
<input type="file" onchange="unlock();" name="file">
<button type="submit" id="buttonSubmit" value="upload" disabled>Upload</button>
</form> 
</body>
</html>

Upvotes: 1

Anshul
Anshul

Reputation: 92

<html>
<head>
<style>
li
{
display: inline-block;
}
</style>
<script>
function formValidation()
{
    if(document.getElementById("fileName").value==""||document.getElementById("fileName").value==null)
    {
        alert("no file selected");
    return false;
    }
    else
        return true;
    }
</script>
</head>
<body>
<form action="done.php" method="post" enctype="multipart/form-data" onSubmit="return formValidation()">
            <input id="fileName" type="file" name="file">
            <button type="submit" value="upload">Upload</button>
    </form> 
</body>
</html>

Upvotes: 1

donald123
donald123

Reputation: 5739

Depending on your "View-Code" it could be something like that

   <form action="done.php" method="post" enctype="multipart/form-data">
        <input type="file" name="file">
        <input type="hidden" name="todo" value="fileupload"?>
        <button type="submit" value="upload">Upload</button>
   </form> 
   <?php if($_POST && !$_FILES):?>
   <h3>"No file selected".</h3>
   <?php endif;?>

Upvotes: 1

Meenesh Jain
Meenesh Jain

Reputation: 2528

You can check it with

if(strlen($_FILES[$mcFile]['name'])==0){
  echo "Error No file selected ";
}

OR

if ($_FILES["file"]["error"] > 0){ 
 echo "Error No file selected ";
}

These both are the way to check files validation at server end

Upvotes: 0

Related Questions