[英]File validation error when submitting form with an empty file
我有一個表格,當我提交它時,它將驗證文件是否存在。 如果我選擇要上傳的文件,則驗證有效。 當我不需要上傳文件時,我將選擇文件留為空白,驗證不起作用,並且腳本始終顯示該文件已經存在,即使我不需要上傳文件並且input type="file"
不是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>
這是add_pre.php
if(isset($_POST['submit'])){
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!";
}
我需要echo"Success!"
即使我提交的表格沒有文件。
首先檢查您是否首先選擇文件,然后檢查文件是否退出。 因為file_exists還檢查目錄是否退出。 在您的代碼中,當沒有要上載的文件時,您的代碼將檢查雇員目錄是否存在,這是正確的。 因此,您總是顯示文件出口。
if(isset($_POST['submit'])){
if(!isset($_FILES["file"]["name"]))
{
//do what you want
echo "success";
}
else 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!";
}
}
從file_exists()
函數的文檔中,
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
。 這就是為什么您不應該使用mysql_*
函數的原因 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.