2017-01-07 5 views
0

У меня есть форма, и когда я отправлю ее, она будет проверять, существует ли файл или нет. Проверка выполняется, если я выбираю файл для загрузки. Когда мне не нужно загружать файл, я оставляю выбранный файл пустым, проверка не работает, и скрипт всегда показывает, что файл уже существует, хотя мне не нужно загружать файл, а 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!" даже если я отправившего форму без файла.

+0

Затем проверьте, прошел ли файл. 'if (isset ($ FILES))' – RiggsFolly

+0

где я должен положить 'if (isset ($ FILES))'? –

+1

Каждый раз, когда вы используете [mysql_'] (http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php) расширение базы данных в новом коде ** [ котенок задушен где-то в мире] (http://2.bp.blogspot.com/-zCT6jizimfI/UjJ5UTb_BeI/AAAAAAAACgg/AS6XCd6aNdg/s1600/luna_getting_strangled.jpg) ** он устарел и был в течение многих лет и ушел навсегда в PHP7. Если вы просто изучаете PHP, потратьте свои силы на изучение расширений базы данных «PDO» или «mysqli». [Начать здесь] (http://php.net/manual/en/book.pdo.php) – RiggsFolly

ответ

1

С the documentation из 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 
    } 
} 

Sidenote: Не используйте mysql_* функции, они являются устаревшими начиная с PHP 5.5 и полностью удаляются в PHP 7.0. Вместо этого используйте mysqli или pdo. And this is why you shouldn't use mysql_* functions.

1

сначала проверьте, сначала вы выбираете файл, затем проверяете, завершен ли файл. потому что 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!"; 
    } 
    }