

画像のアップロードの処理を条件分岐で書いてます。

①画像が選択されていない場合は「画像が選択されておりません」のエラーが、  
②png・jpeg画像が投稿されると「対象ファイルはPNGまたはJPGのみです！」のエラーが、  
③画像のアップロードに失敗すると「ファイルのアップロードに失敗しました」のエラーが  
表示されるようにしたいです。

gif画像を投稿すると、「対象ファイルはPNGまたはJPGのみです！」と  
「ファイルのアップロードに失敗しました」の2つのエラーが表示されてしまいます。  
if文のロジックがおかしいとは思いますが、原因が特定できず・・・  
どなたかご教示ください。

[code]

    <?php
    error_reporting(E_ALL & ~E_NOTICE);
    require_once('functions.php');
    
    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
      $name = $_POST['name'];
      $image_name = $_POST['image_name'];
      $img_data = "images/" . $_FILES["img_data"]["name"];
      $errors = array();
    
      if ($name == '') {
        $errors['name'] = "投稿者が入力されておりません。";
      }
    
      if ($image_name == '') {
        $errors['img_name'] = "画像タイトルが入力されておりません。";
      }
    
      if (strlen($_FILES["img_data"]["name"]) > 0) {
        $fileinfo = pathinfo($_FILES["img_data"]["name"]);
        $fileext = strtoupper($fileinfo["extension"]);
        //$errmsg = "";
    
        if ($fileext != "PNG" and $fileext != "JPG") {
          $errors['file_extension'] = "対象ファイルはPNGまたはJPGのみです！";
        } else {
          $img_data = "images/" . $_FILES["img_data"]["name"];
    
          if (!move_uploaded_file($_FILES["img_data"]["tmp_name"], $img_data)) {
              $errors['file_upload_failure'] = "ファイルのアップロードに失敗しました。";
          }
        } else (file_exists($img_data)) {
          $errors['file_upload_none'] = "画像が選択されておりません";
        }
      }
    
      if (empty($errors)) {
        header('location: postdone.php');
        exit;
      }
    }
    
    
    ?>
    
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="utf-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <title>画像投稿ページ</title>
      <link rel="stylesheet" href="reset.css">
      <link rel="stylesheet" href="style.css">
    </head>
    <body>
    <h1>画像投稿掲示板</h1>
    <hr>
    <form class="contents" action="" method="post" enctype="multipart/form-data">
    <table border="0" cellspacing="0" cellpadding="0" class="table_basic">
    
    <colgroup>
      <col width="33%" />
      <col width="67%" />
    </colgroup>
    
      <tr>
        <th><span>投稿者</span><span class="must">必須</span></th>
        <td ><input type="text" name="name" value="" class="box"><br>
          <?php if ($errors['name']) : ?>
             <?php echo h($errors['name']) ?>
          <?php endif ?>
        </td>
      </tr>
    
      <tr>
        <th><span>画像タイトル</span><span class="must">必須</span></th>
        <td><input type="text" name="image_name" value="" class="box"><br>
         <?php if ($errors['img_name']) : ?>
             <?php echo h($errors['img_name']) ?>
         <?php endif ?>
        </td>
      </tr>
    
      <tr>
        <th><span>画像ファイル</span><span class="must">必須</span></th>
        <td><input type="file" name="img_data" value="選択してください"><br>
        <?php if ($errors['file_extension']) : ?>
             <?php echo h($errors['file_extension']) ?>
        <?php endif ?>
        <?php if ($errors['file_upload_failure']) : ?>
             <?php echo h($errors['file_upload_failure']) ?>
        <?php endif ?>
        <?php if ($errors['file_upload_none']) : ?>
             <?php echo h($errors['file_upload_none']) ?>
        <?php endif ?>
        </td>
      </tr>
    
    </table>
    <p class="button"><input type="submit" name="submit" value="投稿する" width="50px"></p>
    </form>
    <p class="link"><a href="index.php">画像一覧ヘージはこちら>></a></p>
    </body>
    </html>
    
[/code]


CC BY-SA 3.0
2015-11-20T13:11:56.543
19095
2015-11-20T13:11:56.543
7176
question
php
【再掲】画像アップロードのバリデーションに関して