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

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

ただいまの
回答率

91.78%

  • PHP

    13275questions

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

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

解決済

回答 2

投稿 2017/01/24 15:57 ・編集 2017/01/24 16:50

  • 評価
  • クリップ 0
  • VIEW 253

k3n1

score 41

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

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

up.php

<?php


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

}




if(isset($_GET['error'])&&$_GET['error']==2){
echo '<span style="color: #ee0000">JPEGファイルを選択してください!</span>';
}


if (isset($_GET['error'])&&$_GET['error']==3) {
    echo '<span style="color: #ee0000">横幅を小さくしてください!</span>';
}else{
    echo "";
}
if (isset($_GET['error'])&&$_GET['error']==4) {
    echo '<span style="color: #ee0000">縦幅を小さくしてください!</span>';
}else{
    echo "";
}

?>
<!DOCTYPE html>
<html>
<head>

  <meta charset="utf-8">
  <title>php</title>
</head>
<body>
<form action="resize.php" method="get" name="form" ">


<input type="hidden" name="MAX_FILE_SIZE" value="20971520">    
<p>
<input type="file" name="upfile" size="30" id="upload">
</p>

<p>
<input type="submit" value="送信する">
</p>
</form>
</body>

  </html>

resize.php

<?php
ini_set('display_errors', '1');
error_reporting(E_ALL);



$file = $_FILES['upfile'];
$tmp_name = $file['tmp_name']; // 一時ファイルのパス
$filesize = $_FILES['upfile']['size'];


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

    header('location:http://localhost/up/up.php?error='.$error);


$finfo = new finfo(FILEINFO_MIME_TYPE);
if (!preg_match('/\.jpg$|\.jpeg$/i', $file['name'])
        || $finfo->file($tmp_name) !== 'image/jpeg') {
    echo '<span style="color: #ee0000">JPEGファイルを選択してください!</span>';
     $error="2";
}

$result = true;
$get = getimagesize($tmp_name);

if ($get["0"]>1000) {
    $result = false;
    echo '<span style="color: #ee0000">横幅を小さくしてください!</span>';
    $error="3";
}
if ($get["1"]>1000) {
    $result = false;
    echo '<span style="color: #ee0000">縦幅を小さくしてください!</span>';
    $error="4";
}

if ($result) {
    echo '送信完了';

}

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kei344

    2017/01/24 16:47

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

    キャンセル

  • kei344

    2017/01/24 16:56

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

    キャンセル

  • 退会済みユーザー

    2017/01/24 17:58

    こちらの質問が他のユーザから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

回答 2

checkベストアンサー

+3

以前ご自身が提案された(ような気がする?)
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 16:34

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

  • 2017/01/24 16:41

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

    キャンセル

  • 2017/01/24 16:50

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

    キャンセル

+1

if (isset ( $_GET ['error'] ) && $_GET ['error'] = 1) {
if (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


ini_set ( 'display_errors', '1' );
error_reporting ( E_ALL );
$file = $_FILES ['upfile'];
$tmp_name = $file ['tmp_name']; // 一時ファイルのパス
$filesize = $_FILES ['upfile'] ['size'];
$result = true; 
$error="";
if ($filesize > 524002) {
    $result = false;
    $error.="error[]=1&";
}
$finfo = new finfo ( FILEINFO_MIME_TYPE );
if (! preg_match ( '/\.jpg$|\.jpeg$/i', $file ['name'] ) || $finfo->file ( $tmp_name ) !== 'image/jpeg') {
    $result = false;
    $error .= "error[]=2&";
}
$get = getimagesize ( $tmp_name );
if ($get ["0"] > 1) {
    $result = false;
    $error .= "error[]=3&";
}
if ($get ["1"] > 1) {
    $result = false;
    $error .= "error[]=4&";
}
if ($result) {
    echo '送信完了';
}else{
    header ( 'location:up.php?' . $error );
}
?>

投稿 2017/01/24 16:32

編集 2017/01/24 17:40

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

  • 2017/01/24 16:44

    ありがとうございます。

    キャンセル

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

ただいまの回答率

91.78%

関連した質問

同じタグがついた質問を見る

  • PHP

    13275questions

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

閲覧数の多いPHPの質問