2016-04-15 10 views
2

フォームにファイルアップロード入力を追加しました。私が追加したPHPの検証では、フォームの送信が許可されていません。送信ボタンを押すたびに、ファイルが.jpeg、jpgなどである必要があるという検証エラーが表示されます。この検証が必要ですが、ファイルがアップロードされている場合のみです。PHPバリデーションが送信をブロックする

私は、このファイルをアップロードしてからフォームに提出するか、フォームが送信される前にキャッチするかどうかだけを確認するために何をすべきかはわかりません。

if(isset($_FILES['file'])) { 
    $file = $_FILES['file']; 

    //File properties 
    $file_name = $file['name']; 
    $file_tmp = $file['tmp_name']; 
    $file_size = $file['size']; 
    $file_error = $file['error']; 

    //File Extension 
    $file_ext = explode('.', $file_name); 
    $file_ext = strtolower(end($file_ext)); 

    $allowed = array('txt', 'jpg', 'jpeg', 'png'); 

    if(in_array($file_ext, $allowed)) { 
     if($file_error === 0) { 
      if($file_size <= 2097152) { 
       $file_name_new = uniqid('', true) . '.' . $file_ext; 


      } else { 
       echo "Sorry, your file is WAY too large"; 
      } 
     } 
    } else { 
     echo "Sorry, only JPG, JPEG, PNG and TXT files are allowed."; 
    } 
} 

<form action="" autocomplete="on" method="POST" id="project-information-form" enctype="multipart/form-data"> 
    <input type="file" name="file" id="file" class="inputfile" data-multiple-caption="{count} files selected" multiple> 
    <label for="file"><span id="file-upload-image"><img src="/icons/white-upload.png" height="25px" width="25px"></span>File Upload</label> 
    <input type="submit" id="submit-project" class="submit-project-button" value="Send Project Inquiry"> 
</form> 

ファイルがアップロードされていない場合でも、フォームを送信するために私ができることを知っている人はいますか?

+0

[このスレッド](http://stackoverflow.com/questions/2958167/how-to-test-if-a-user-has-selected-a-file-to-upload)を見てください。 –

答えて

2

あなたはisset()を行うのではなく、UPLOAD_ERR_NO_FILE定数を確認することができます。

if($_SERVER['REQUEST_METHOD'] == 'POST'){ 
    if($_FILES['file']['error'] != UPLOAD_ERR_NO_FILE) { 
     // an upload was attempted 

あなたisset()に問題が$_FILES['file']は、ユーザが選択しなかった場合でも、(ただし、エラーコード付き)に設定されるということですファイル。

+0

なぜそれはいつも設定されますか? – Becky

+0

これは実際には機能しませんでした。今すぐエラーメッセージを表示し、送信ボタンが押されるのを待っていません。 – Becky

+0

助けてくれてありがとう! – Becky