1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

画像ファイルのバリデーション

Posted at

ECサイト作成の過程で商品の画像を登録する必要があり、その際のバリデーションに時間がかかってしまったので、備忘録として残します。

作りたいもの

ユーザー登録と同様に商品の情報をする際にバリデーションを行います。具体的には以下のようになります。

  • product_register.phpで商品名、商品画像、紹介文、価格を入力する。
  • 入力情報にバリデーションをかけて、エラーメッセージがなければproduct_confirm.phpに遷移し、そうでなければエラーメッセージを表示してリダイレクトする。
  • バリデーションは、全て入力必須、画像は画像ファイルであること、価格は半角数字とした

画像ファイルのバリデーション

以下のような画像ファイルかどうかを判定する関数をvalidation.phpに作成しました。(前回の記事で作成したファイルに追加しました。)

<?
function isImage($fileName,$tmpImage,$filetype){
     if (is_uploaded_file($tmpImage)) {
         if(explode("/",$filetype)[0] != "image"){
           //画像判定
           $message= "画像ファイルをアップロードしてください。";
           return $message;
         }

        	if (move_uploaded_file ($tmpImage, "images/" .date("Ymd-His") . $fileName)) {
          	chmod("images/" . date("Ymd-His") . $fileName, 0644);
          	echo  $fileName."がアップロードされました。";

          } else {
          	$message = "ファイルをアップロードできません。";
            return $message;
          }

      } else {
      	$message = "ファイルが選択されていません。";
        return $message;
      }
?>

引数には$filenameにはファイル名,$tmpImageには一時保存ファイル名,filetypeにはファイルのMIMEタイプを渡します。
この関数を使う際には以下のように記述します。

<?

        require_once 'validation.php';
        $val = new Validation();
        $result = $val->validate($input_control,$_POST);
        $isImage= $val->isImage($_FILES['productImage']['name'],$_FILES['productImage']['tmp_name'],$_FILES['productImage']['type']);
        if(!is_null($is_image)){
          $result['productImage']=$isImage;
        }

      if(!(empty($result))){
        //エラーがある場合の処理

        foreach($result as $error){
          echo $error;
          echo '<br>';
        }


      }else{
        //エラーがない場合の処理
        $_SESSION = $_POST;
        header('Location:product_confirm.php');//確認ページに遷移
        exit;
      }

isImage関数では適切なファイルであればreturnがされないのでNULLが返ってきます。なので返り値がNULLではないときにエラーメッセージを代入します。
$result['productImage']=isImage();とすればよさそうに見えますが、そうするとバリデーション通過時に$result['productImage']にNULLが入ってしまい、$result自体は空ではなくなってしまうのでエラーメッセージが入ってしまうので注意しましょう。

1
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?