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

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

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

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

Q&A

解決済

3回答

1836閲覧

フォームで上げたデータが条件に満たない場合にリダイレクトさせてエラー文を表示する方法

Kuriaki

総合スコア85

PHP

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

0グッド

0クリップ

投稿2017/01/20 01:39

編集2017/01/20 01:54

いろいろ調べましたが、一日も悩みました。
やりたいことはエラーごとにクエリを作り、urlにつけたクエリを見て、
up.phpページで、該当するエラー文を表示することです。ですが素人の自分はそれらをどう実行すればいいかをまったくわからない状態です。答えがほしい訳ではありませんが、アドバイスやヒント、もしくは方向性または参考ページを頂けたら幸いです。
よろしくお願いいたします。

up.php

php

1<!DOCTYPE html> 2<html> 3<head> 4 5 <meta charset="utf-8"> 6 <title>php</title> 7</head> 8<body> 9<form action="resize.php" method="get" name="form" enctype="multipart/form-data"> 10 11 12<input type="hidden" name="MAX_FILE_SIZE" value="20971520"> 13<p> 14<input type="file" name="upfile" size="30" id="upload"> 15</p> 16 17<p> 18<input type="submit" value="送信する"> 19</p> 20</form> 21</body> 22 23 </html>

resize.php

php

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

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

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

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

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

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

guest

回答3

0

引用テキストup.phpページで、該当するエラー文を表示することです

ということでしたら、
up.php
↓ ajaxでファイル送信
resize.php
↓ チェック結果をreturn
up.php (DOM操作)

はいかがでしょうか。

[JavaScript] Ajaxでファイルをアップロード【jQuery不使用】

投稿2017/01/20 02:10

namimon

総合スコア726

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

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

0

ベストアンサー

とりあえず header() 前に出力しない。

【PHPでリダイレクトをする - header関数とLocation】
http://wp.tech-style.info/archives/273


エラーを渡して up.php 側でエラーを表示する必要があるのでは?

PHP

1$error = '011001'; // これは例示用の適当な文字列 2header('location:http://localhost/up.php?error='.$error);

以前から気にはなっていたのですが、font要素は廃止された要素なので、span要素にでもしてCSSで色指定してください。

HTML

1<span style="color: #ee0000">横幅を小さくしてください!</span>

【font 要素 - HTML | MDN】
https://developer.mozilla.org/ja/docs/Web/HTML/Element/font

廃止

This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.

使用上の注意:

この要素は使用しないで下さい! この要素は HTML 3.2 で一度仕様に取り込まれましたが、HTML 4.01 で他の非セマンティクス要素(※装飾用途のみの要素)とともに非推奨要素に指定され、HTML5 で廃止されています。

投稿2017/01/20 02:04

kei344

総合スコア69407

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

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

Kuriaki

2017/01/20 02:52

回答ありがとうございます。 font要素のこと全然知らなかったです、また一つ勉強になりました。 up.php側でエラー文を表示する必要があることは知っていますが、そのやり方はまだ模索中です。 ちょっと鈍いかもしれません自分は。
guest

0

もう少し簡単なモデルで検証されたほうが良いと思いますが
ぱっと見、おかしいと思ったのは、バリデートして不正データを
エラーで表示していますよね?
エラー出力した後にheader()でlocationを飛ばすことはできません。
なので、エラーを表示したなら、「up.phpに戻る」のような
リンクを貼るのが妥当です。

その他一部typoも見受けられるのでご自身でソースを見返したほうがよろしいかと

投稿2017/01/20 01:46

yambejp

総合スコア114814

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

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

Kuriaki

2017/01/20 01:52

回答ありがとうございます。 自分の説明不足かもしれませんが、header()でエラー文を飛ばすことではないですが、 エラーごとにクエリを作り、urlにつけたクエリを見て、 up.phpページで、該当するエラー文を表示するということです。 ご指摘ありがとうございます、もう少し質問を編集します。
yambejp

2017/01/20 02:00

ごめんなさい、回答の意図がうまく伝わってないかもしれないし 私の回答が本質的に的をはずしているかもしれないのですが・・ header()関数の前に、たとえば改行コードやBOMなど 一切の出力は許されていません。ご提示のソースではechoを 多用されていますので何らかの文字が表示された瞬間、 header()関数はエラーになります そのあたりのご理解はされていますでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問