提交带有空文件的表单时出现文件验证错误

时间:2017-01-07 16:12:37

标签: php forms file validation

我有一个表单,当我提交表单时,它将验证文件是否存在。如果我选择要上传的文件,则验证有效。当我不需要上传文件时,我将选择文件保留为空,验证不起作用,并且脚本始终显示文件已经存在,即使我不需要上传文件和{{1} }不是class Foo(object): """This is Foo""" def __new__(cls, label): newcls = type('FooSubclass', (Foo, ), {'__doc__': "This is {} Foo".format(label)}) return newcls >>> help(Foo('a')) Help on class FooSubclass in module __main__: class FooSubclass(Foo) | This is a Foo | | Method resolution order: | FooSubclass | Foo | __builtin__.object | | Static methods inherited from Foo: | | __new__(cls, label) | | ---------------------------------------------------------------------- | Data descriptors inherited from Foo: | | __dict__ | dictionary for instance variables (if defined) | | __weakref__ | list of weak references to the object (if defined)

这是我的代码:

input type="file"

这是add_pre.php

required

我需要<form action="../function/add_pre.php" method="post" enctype="multipart/form-data" > <table class="table table-bordered"> <tr> <td><label class="form-control">Attach and Upload your Proposal for Purchase Request:</label></td> <td><input class="form-control" type="file" name="file" title="Click here to select file to upload."></td> </tr> </table> <button name="submit" type="submit" class="btn btn-info"><i class="fa fa-paper-plane"></i> Submit</button> </form> ,即使我提交了没有文件的表单。

2 个答案:

答案 0 :(得分:1)

首先检查您是否先选择文件,然后检查文件是否退出。因为file_exists也检查目录是否退出。在您的代码中,当没有要上传的文件时,您的代码会检查员工目录是否退出,这是真的。因此,您始终显示文件出口。

>>> import itertools

>>> list(itertools.combinations([1,2,3], 2))
[(1, 2), (1, 3), (2, 3)]

答案 1 :(得分:1)

来自file_exists()函数的the documentation

  

file_exists - 检查文件或目录是否存在

因此,如果您没有上传任何文件,$_FILES["file"]["name"]将是一个空字符串,file_exists()函数将检查此目录../employee/是否存在,哪个确实存在在你的情况下。这就是您的文件验证失败的原因。

解决方案是,使用is_uploaded_file()函数检查文件是否已上传,如下所示:

if(isset($_POST['submit'])){
    if(is_uploaded_file($_FILES["file"]["tmp_name"])){
        if (file_exists("../employee/" . $_FILES["file"]["name"])){
            echo '<script language="javascript">alert(" Sorry!! Filename Already Exists...") </script>';
            echo '<script language="javascript">window.history.back();</script>';
        }else{
            move_uploaded_file($_FILES["file"]["tmp_name"],"../employee/" . $_FILES["file"]["name"]);
            $sql = "INSERT INTO purchase_request_file (pr_no,file) VALUES ('" .$pr_no."','" . $_FILES["file"]["name"] ."');";
            if (!mysql_query($sql))
                echo('Error : ' . mysql_error());
            else
                echo"Success!";
        }
    }else{
        // user hasn't uploaded any file
    }
}

旁注:不要使用mysql_*函数,从PHP 5.5开始不推荐使用它们,并且在PHP 7.0中完全删除它们。请改用mysqlipdoAnd this is why you shouldn't use mysql_* functions