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

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

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

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

Q&A

解決済

1回答

1305閲覧

条件が満たない時エラーが発生し、クエリが作成され、そのクエリに対し、条件に合ったエラー文を出したいです。

Kuriaki

総合スコア85

PHP

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

0グッド

0クリップ

投稿2017/01/23 02:09

題名が少しわかりにくいかもしれませんので、こちらで改めて説明させていただきます。
画像のアップロードページを作りましが。
up.phpとresize.php 2ページあります。
resizeページでアップされた画像データを条件でエラーチェックをし、そのエラー文をup.phpで表示できるようしています。
しかし、今はup.php側でエラー文の条件判別ができない状態です。
やりたいことは、resizeでエラーが発生した時にクエリが作成され、up.phpでその作成されたクエリに対して、条件に合ったエラー文を出したいです。
ちなみに今はup.phpで四つのエラーが全部出てる状態です。

説明が下手で申し訳ありませんが、よろしくお願いいたします。

php

1if (isset($_GET['error'])&&(isset($_GET['filesize'])>5242880)) { 2 echo '<span style="color: #ee0000">5M以下のファイルを選択して下さい!</span>'; 3 4}else{ 5 echo "";

このような方法でやって見たですが、エラーは確かに一つ減りました。
しかしこのエラー文は減らしたというより、もう出てこないみたいです。
しかしエラーもなかったので、ただ消えただけです。
ここの部分のみ試したです。
↓↓に全部のコードを貼ります。
up.php

php

1<?php 2 3 4if (isset($_GET['error'])&&(isset($_GET['filesize'])>5242880)) { 5 echo '<span style="color: #ee0000">5M以下のファイルを選択して下さい!</span>'; 6 7}else{ 8 echo ""; 9} 10 11if(isset($_GET['error_2'])){ 12 echo '<span style="color: #ee0000">JPEGファイルを選択してください!</span>'; 13}else{ 14 echo ""; 15} 16if (isset($_GET['error_3'])) { 17 echo '<span style="color: #ee0000">横幅を小さくしてください!</span>'; 18}else{ 19 echo ""; 20} 21if (isset($_GET['error_4'])) { 22 echo '<span style="color: #ee0000">縦幅を小さくしてください!</span>'; 23}else{ 24 echo ""; 25} 26 27?> 28<!DOCTYPE html> 29<html> 30<head> 31 32 <meta charset="utf-8"> 33 <title>php</title> 34</head> 35<body> 36<form action="resize.php" method="get" name="form" "> 37 38 39<input type="hidden" name="MAX_FILE_SIZE" value="20971520"> 40<p> 41<input type="file" name="upfile" size="30" id="upload"> 42</p> 43 44<p> 45<input type="submit" value="送信する"> 46</p> 47</form> 48</body> 49 50 </html> 51 52

resize.php

php

1<?php 2ini_set('display_errors', '1'); 3error_reporting(E_ALL); 4 5if (!isset($_FILES['upfile'])) { 6 echo '<span style="color: #ee0000">恐らくアップロードページのHTMLに記述ミス有り!</span>'; 7 8} 9 10$file = $_FILES['upfile']; 11$tmp_name = $file['tmp_name']; // 一時ファイルのパス 12$filesize = $_FILES['upfile']['size']; 13 14 15if ($filesize > 5242880) { 16 echo '<span style="color: #ee0000">5M以下のファイルを選択して下さい!</span>'; 17 $error="1"; 18} 19 20 21$error = "1"; 22$error_2 = "2"; 23$error_3 = "3"; 24$error_4 = "4"; 25header('location:http://localhost/up/up.php?error='.$error."&error_2=".$error_2."&error_3=".$error_3."&error_4=".$error_4); 26 27 28$finfo = new finfo(FILEINFO_MIME_TYPE); 29if (!preg_match('/\.jpg$|\.jpeg$/i', $file['name']) 30 || $finfo->file($tmp_name) !== 'image/jpeg') { 31 echo '<span style="color: #ee0000">JPEGファイルを選択してください!</span>'; 32 $error="2"; 33} 34 35$result = true; 36$get = getimagesize($tmp_name); 37 38if ($get["0"]>1000) { 39 $result = false; 40 echo '<span style="color: #ee0000">横幅を小さくしてください!</span>'; 41 $error="3"; 42} 43if ($get["1"]>1000) { 44 $result = false; 45 echo '<span style="color: #ee0000">縦幅を小さくしてください!</span>'; 46 $error="4"; 47} 48 49if ($result) { 50 echo '送信完了'; 51 52} 53 54?> 55

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

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

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

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

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

guest

回答1

0

ベストアンサー

色々突っ込みどころがありそうですが、シンプルに解決するならば、
1.up.phpにerrorという変数が送られたら、エラー扱いとしてエラー処理を開始する
2.errorという変数は配列になっており、resize.phpからはそのエラーコードのみを返答する
3.エラーメッセージ自体はup.phpで表示する

という形にするとよいのではないでしょうか。
(配列にせず、error_1とかでも出来はしますが、配列の方がスマートに書けると思います)

上記の仕様で書いてみると、以下のようなものでどうでしょうか。

errorCode.php

PHP

1define('ERROR_CODE_FILE_SIZE', 1); 2define('ERROR_CODE_FILE_TYPE', 2); 3define('ERROR_CODE_FILE_WIDTH', 3); 4define('ERROR_CODE_FILE_HEIGHT', 4);

resize.php

PHP

1require_once('errorCode.php'); 2 3$error = array(); 4if ($filesize > 5242880) { 5 $error[] = ERROR_CODE_FILE_SIZE; 6} 7$finfo = new finfo(FILEINFO_MIME_TYPE); 8if (!preg_match('/\.jpg$|\.jpeg$/i', $file['name']) 9 || $finfo->file($tmp_name) !== 'image/jpeg') { 10 $error[] = ERROR_CODE_FILE_TYPE; 11} 12if ($get["0"]>1000) { 13 $error[] = ERROR_CODE_FILE_WIDTH; 14} 15if ($get["1"]>1000) { 16 $error[] = ERROR_CODE_FILE_HEIGHT; 17} 18 19if(!empty($error)) { 20 $url = 'http://localhost/up/up.php?error[]='.implode('&error[]=', $error); 21 header('Location: '.$url); 22} else { 23 echo '送信完了'; 24}

up.php

PHP

1require_once('errorCode.php'); 2 3$errorMessage = array( 4 ERROR_CODE_FILE_SIZE => '5M以下のファイルを選択して下さい!', 5 ERROR_CODE_FILE_TYPE => 'JPEGファイルを選択してください!', 6 ERROR_CODE_FILE_WIDTH => '横幅を小さくしてください!', 7 ERROR_CODE_FILE_HEIGHT => '縦幅を小さくしてください!', 8); 9 10if(!empty($_GET['error']) && is_array($_GET['error'])) { 11 foreach($_GET['error'] as $error) { 12 if(isset($errorMessage[$error])) { 13 echo '<span style="color: #ee0000">'; 14 echo $errorMessage[$error]; 15 echo '</span>'; 16 }

投稿2017/01/23 03:24

編集2017/01/24 04:37
kunai

総合スコア5405

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

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

Kuriaki

2017/01/23 08:03 編集

ご回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問