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

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

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

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

Q&A

解決済

2回答

1487閲覧

条件にあわせたエラーのクエリを送りたい

Kuriaki

総合スコア85

PHP

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

0グッド

0クリップ

投稿2017/01/24 06:57

編集2017/01/24 07:50

前回も同じこと質問したこもしれませんが、なんかやりたいこととちょっとすれ違った気がします。

コードにも書いたですが、resizeページでエラーチェックをして、そのエラーのクエリをheaderでup.phpまで飛ばして、up.phpでそのエラー文をだしたいです。
エラー文を全部出すことではなく、それぞれif文で条件に合わせてエラー分を出したいです。
条件が複数合わない場合は複数のエラー文を出して、一つだけでしたら、一つだけのエラー文を出したいです。
今困っているのはheaderの中はどう書けば、条件に合ったクエリを飛ばして、up.phpのエラー文を出せることです。
同じことでいろいろスマートな方法があると思いますが、今自分がやっている方法で解決したいです。
よろしくお願いいたします。

up.php

php

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

resize.php

php

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

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

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

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

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

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

kei344

2017/01/24 07:36

「今自分がやっている方法」がどこまでの範囲かによっては回答のしようがありません。「方法」とはどの部分にこだわられているのでしょうか。
Kuriaki

2017/01/24 07:40

すみません、自分が今やっている方法というのはif文で条件を設定し、headerで情報のクエリをup.phpに発信し、up.phpで書いたエラー文が条件に合わせて出せるようにとのことです。
Kuriaki

2017/01/24 07:40

今多分うまくいかないのは、headerでクエリがちゃんと飛ばされていないとおもいます。
kei344

2017/01/24 07:47

回答が付いた質問の編集は慎重に行ってください。回答でタイプミスについての指摘がある場合は「直したこと」がわかるようにしてください。
kei344

2017/01/24 07:56

修正コメントはteratailの使い方を知っている方にしかわかりません。先ほどの指摘に関しては、検索などでページに来たユーザーが見たときに「質問と回答があっていない」とならないために修正して欲しい、ということです。
guest

回答2

0

ベストアンサー

以前ご自身が提案された(ような気がする?)
up.php?error=123的な渡し方であれば$_GET['error']に対してstrposで
if(isset($_GET['error']) and strpos($_GET['error'],'1')!==false) ・・・
のような判別もできるかもしれません。
ただしerrorが10個以上になると数値で渡すときに競合するので
拡張性には乏しいかもしれません(error=1234567891011などは最悪)

配列を意識して
up.php?e[]=1&e[]=2&e[]=3;
のようなデータの渡し方をすればin_arrayなどでチェックができます・。

いちいちissetするのが面倒であればfilter_inputするとよいでしょう

投稿2017/01/24 07:34

yambejp

総合スコア114572

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

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

Kuriaki

2017/01/24 07:41

回答ありがとうございます。 しかし配列ですと、headerでクエリを飛ばしたとき、例えば1のみ送る場合と2と3を送るとか、そのようなことはできますでしょうか
yambejp

2017/01/24 07:50

例示したとおり header(’Location:up.php?e[]=1&e[]=2&e[]=3'); のようにしてやれば、うけとったup.php側で $_GET['e']が配列のように振る舞います
guest

0

php

1if (isset ( $_GET ['error'] ) && $_GET ['error'] = 1) {

php

1if (isset ( $_GET ['error'] ) && $_GET ['error'] == 1) {

$_GET['error']のチェックを=から==に変更してください。

追加 2017/01/24 17:30
事前に$resultをtrueにして実行
errorになるところで$result=falseにする
などという方法があります。
if($result==true){
}else{
このelseの部分でerrorを送る。

}

php

1<?php 2 3 4ini_set ( 'display_errors', '1' ); 5error_reporting ( E_ALL ); 6$file = $_FILES ['upfile']; 7$tmp_name = $file ['tmp_name']; // 一時ファイルのパス 8$filesize = $_FILES ['upfile'] ['size']; 9$result = true; 10$error=""; 11if ($filesize > 524002) { 12 $result = false; 13 $error.="error[]=1&"; 14} 15$finfo = new finfo ( FILEINFO_MIME_TYPE ); 16if (! preg_match ( '/\.jpg$|\.jpeg$/i', $file ['name'] ) || $finfo->file ( $tmp_name ) !== 'image/jpeg') { 17 $result = false; 18 $error .= "error[]=2&"; 19} 20$get = getimagesize ( $tmp_name ); 21if ($get ["0"] > 1) { 22 $result = false; 23 $error .= "error[]=3&"; 24} 25if ($get ["1"] > 1) { 26 $result = false; 27 $error .= "error[]=4&"; 28} 29if ($result) { 30 echo '送信完了'; 31}else{ 32 header ( 'location:up.php?' . $error ); 33} 34?>

投稿2017/01/24 07:32

編集2017/01/24 08:40
date

総合スコア1820

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

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

Kuriaki

2017/01/24 07:44

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問