質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

1回答

3513閲覧

画像アップロードのバリデーションに関して

DaikiYamada

総合スコア11

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2015/11/20 11:28

編集2015/11/20 13:34

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

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

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

php

1<?php 2error_reporting(E_ALL & ~E_NOTICE); 3require_once('functions.php'); 4 5if ($_SERVER['REQUEST_METHOD'] == 'POST') { 6 $name = $_POST['name']; 7 $image_name = $_POST['image_name']; 8 $img_data = "images/" . $_FILES["img_data"]["name"]; 9 $errors = array(); 10 11 if ($name == '') { 12 $errors['name'] = "投稿者が入力されておりません。"; 13 } 14 15 if ($image_name == '') { 16 $errors['img_name'] = "画像タイトルが入力されておりません。"; 17 } 18 19 if (strlen($_FILES["img_data"]["name"]) > 0) { 20 $fileinfo = pathinfo($_FILES["img_data"]["name"]); 21 $fileext = strtoupper($fileinfo["extension"]); 22 //$errmsg = ""; 23 24 if ($fileext != "PNG" and $fileext != "JPG") { 25 $errors['file_extension'] = "対象ファイルはPNGまたはJPGのみです!"; 26 } else { 27 $img_data = "images/" . $_FILES["img_data"]["name"]; 28 29 if (!move_uploaded_file($_FILES["img_data"]["tmp_name"], $img_data)) { 30 $errors['file_upload_failure'] = "ファイルのアップロードに失敗しました。"; 31 } 32 } else (file_exists($img_data)) { 33 $errors['file_upload_none'] = "画像が選択されておりません"; 34 } 35 } 36 37 if (empty($errors)) { 38 header('location: postdone.php'); 39 exit; 40 } 41} 42 43 44?> 45 46<!DOCTYPE html> 47<html> 48<head> 49 <meta charset="utf-8"> 50 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 51 <title>画像投稿ページ</title> 52 <link rel="stylesheet" href="reset.css"> 53 <link rel="stylesheet" href="style.css"> 54</head> 55<body> 56<h1>画像投稿掲示板</h1> 57<hr> 58<form class="contents" action="" method="post" enctype="multipart/form-data"> 59<table border="0" cellspacing="0" cellpadding="0" class="table_basic"> 60 61<colgroup> 62 <col width="33%" /> 63 <col width="67%" /> 64</colgroup> 65 66 <tr> 67 <th><span>投稿者</span><span class="must">必須</span></th> 68 <td ><input type="text" name="name" value="" class="box"><br> 69 <?php if ($errors['name']) : ?> 70 <?php echo h($errors['name']) ?> 71 <?php endif ?> 72 </td> 73 </tr> 74 75 <tr> 76 <th><span>画像タイトル</span><span class="must">必須</span></th> 77 <td><input type="text" name="image_name" value="" class="box"><br> 78 <?php if ($errors['img_name']) : ?> 79 <?php echo h($errors['img_name']) ?> 80 <?php endif ?> 81 </td> 82 </tr> 83 84 <tr> 85 <th><span>画像ファイル</span><span class="must">必須</span></th> 86 <td><input type="file" name="img_data" value="選択してください"><br> 87 <?php if ($errors['file_extension']) : ?> 88 <?php echo h($errors['file_extension']) ?> 89 <?php endif ?> 90 <?php if ($errors['file_upload_failure']) : ?> 91 <?php echo h($errors['file_upload_failure']) ?> 92 <?php endif ?> 93 <?php if ($errors['file_upload_none']) : ?> 94 <?php echo h($errors['file_upload_none']) ?> 95 <?php endif ?> 96 </td> 97 </tr> 98 99</table> 100<p class="button"><input type="submit" name="submit" value="投稿する" width="50px"></p> 101</form> 102<p class="link"><a href="index.php">画像一覧ヘージはこちら>></a></p> 103</body> 104</html>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

PNGまたはJPGであったらアップロードするって事ですよね

php

1if ($fileext != "PNG" and $fileext != "JPG") { 2 $errors['file_extension'] = "対象ファイルはPNGまたはJPGのみです!"; 3} else { 4 $img_data = "images/" . $_FILES["img_data"]["name"]; 5 6 if (!move_uploaded_file($_FILES["img_data"]["tmp_name"], $img_data)) { 7 $errors['file_upload_failure'] = "ファイルのアップロードに失敗しました。"; 8 } 9}

ちなみに下の
“画像が選択されておりません”も
strlen($_FILES["img_data"]["name"]) > 0
に対するelseにした方がよいと思います。

投稿2015/11/20 11:49

編集2015/11/20 11:52
yuki84web

総合スコア1857

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

DaikiYamada

2015/11/20 12:15

こうですか?どこか階層間違ってますか? 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'] = "画像が選択されておりません"; }
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問