簡體   English   中英

提交帶有空文件的表單時文件驗證錯誤

[英]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中將其完全刪除。 改用mysqlipdo 這就是為什么您不應該使用mysql_*函數的原因

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM