我有一个表单,当我提交表单时,它将验证文件是否存在。如果我选择要上传的文件,则验证有效。当我不需要上传文件时,我将选择文件保留为空,验证不起作用,并且脚本始终显示文件已经存在,即使我不需要上传文件和{{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>
,即使我提交了没有文件的表单。
答案 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中完全删除它们。请改用mysqli
或pdo
。 And this is why you shouldn't use mysql_*
functions。