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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

1回答

1444閲覧

【PHP】1つのインスタンスで同じような処理を三回繰り返したい。

fearless0603

総合スコア41

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2016/04/21 01:41

それぞれ異なるnameを持ったファイルタグからファイルをアップロードして、①ファイルがアップロードされたか、②拡張子がJPG,PED,PNGか③ファイルサイズが2MB以下か、以上をクリアしたら正しくアップロード完了というような判定をして、できなければエラーを返すというような処理を実装したいです。

1つのインスタンスで同じ処理を三回繰り返したいのですが、画面に反映させたところうまく文字が出力されません・・・・
バリデーションは正しくできていると思います。
うまくそれぞれのnameに合わせた処理が出力させるような使用にしたいです。

よろしくお願いします。

HTML

1コード 2 3<body> 4<p>テスト</p> 5<p>引数に<?php echo $filename[0]; ?>を指定した場合の処理結果は<?php echo $Result->check($filename[0]);?></p> 6<p>引数に<?php echo $filename[1]; ?>を指定した場合の処理結果は<?php echo $Result->check($filename[1]);?></p> 7<p>引数に<?php echo $filename[2]; ?>を指定した場合の処理結果は<?php echo $Result->check($filename[2]);?></p> 8 9</body> 10

PHP

1コード 2<?php 3 4$Result = new Result; 5$errData = $Result->getErrData(); 6$filename = array('certification','cert_seal','citizen'); 7 8 9class Result{ 10 public $errData; 11 //public $filename = array('certification','cert_seal','citizen'); 12 13 public function first(){ 14 $this->check($filename[0]); 15 $this->check($filename[1]); 16 $this->check($filename[2]); 17 } 18 19 20 function check($_filename){ 21 $ret = false;//一番最後にいかない限りfalseを返す 22 if(is_uploaded_file($_FILES[$_filename]["tmp_name"])){ 23 if(preg_match("(.+\.(jpg|pdf|png))",$_FILES[$_filename]["name"])){ 24 $filesize = filesize($_FILES[$_filename]['tmp_name']); 25 if($filesize <= 2097152){ 26 $this->errData="アップロード成功!"; 27 $ret=true; 28 } else { 29 $this->errData="ファイルサイズが大きすぎますので2MB以下にしてください。"; 30 } 31 } else { 32 $this->errData="jpg,pdf,png の形式ではありません。jpg,pdf,png形式のファイルのみアップロードできます。"; 33 } 34 } else { 35 $this->errData="ファイルが参照されていません。"; 36 } 37 return $ret; 38 } 39 40 function getErrData(){ 41 $errData['certification_err']="テスト1"; 42 $errData['cert_seal_err']="テスト2"; 43 $errData['citizen_err']="テスト3"; 44 return $this->errData; 45 } 46 47 48} 49 50 51?> 52

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

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

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

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

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

guest

回答1

0

「function check」の戻り値をメッセージ文字列にすれば出力できるのでは?
たとえば

php

1function check($_filename){ 2 // $ret = false;//一番最後にいかない限りfalseを返す 3 if(is_uploaded_file($_FILES[$_filename]["tmp_name"])){ 4 if(preg_match("(.+\.(jpg|pdf|png))",$_FILES[$_filename]["name"])){ 5 $filesize = filesize($_FILES[$_filename]['tmp_name']); 6 if($filesize <= 2097152){ 7 return "アップロード成功!"; 8 // $ret=true; 9 } else { 10 return "ファイルサイズが大きすぎますので2MB以下にしてください。"; 11 } 12 } else { 13 return "jpg,pdf,png の形式ではありません。jpg,pdf,png形式のファイルのみアップロードできます。"; 14 } 15 } else { 16 return "ファイルが参照されていません。"; 17 } 18 //return $ret; 19}

こんなふうに。

■追記

「『function check』の戻り値はbooleanにしたい」とか言われてしまったので、質問者ソースを部分的に添削してみます。
まずはphp側:class Result

php

1class Result{ 2 public $errData; 3 4 const success = "アップロード成功!"; // 定数として成功時メッセージを定義 5 6 //使わない変数は邪魔です。消しましょう。 7 //public $filename = array('certification','cert_seal','citizen'); 8 9 /* 使ってないメソッドは邪魔です。消しましょう。 10 public function first(){ 11 $this->check($filename[0]); 12 $this->check($filename[1]); 13 $this->check($filename[2]); 14 } 15 */ 16 17 function check($_filename){ 18 // $ret = false;//一番最後にいかない限りfalseを返す // ←これ実はいらないでしょ? 19 if(is_uploaded_file($_FILES[$_filename]["tmp_name"])){ 20 if(preg_match("(.+\.(jpg|pdf|png))",$_FILES[$_filename]["name"])){ 21 $filesize = filesize($_FILES[$_filename]['tmp_name']); 22 if($filesize <= 2097152){ 23 // $this->errData="アップロード成功!"; // 定数で持つので不要。 24 // $ret=true; // ↓これでいいでしょ?true返すのはこのブロックだけなんだから。 25 return true; 26 } else { 27 $this->errData="ファイルサイズが大きすぎますので2MB以下にしてください。"; 28 } 29 } else { 30 $this->errData="jpg,pdf,png の形式ではありません。jpg,pdf,png形式のファイルのみアップロードできます。"; 31 } 32 } else { 33 $this->errData="ファイルが参照されていません。"; 34 } 35 // return $ret; // ↓これでいいでしょ? 36 return false; 37 } 38 39 function getErrData(){ 40 /* ここのコードはゴミでしょ?消しましょう。 41 $errData['certification_err']="テスト1"; 42 $errData['cert_seal_err']="テスト2"; 43 $errData['citizen_err']="テスト3"; 44 */ 45 return $this->errData; 46 } 47}

で、function checkの戻り値(boolean)を有効活用するならhtml側ではこんな感じ?

html

1<p>引数に<?php echo $filename[0]; ?>を指定した場合の処理結果は<?php echo $Result->check($filename[0]) ? $Result->success : $Result->getErrData(); ?></p>

投稿2016/04/21 01:50

編集2016/04/21 03:13
tkturbo

総合スコア5572

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

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

fearless0603

2016/04/21 02:03

ありがとうございます!!上記のコードでうまく処理できましたが、戻り値にはブーリアン型のtrue か falseを返すような値にはしておきたいです。 他に有効なのがあればご教授お願いします・・・!
tkturbo

2016/04/21 02:11

戻り値を何に使うのですか? 質問者ソースでは「function check」の戻り値をまったく利用していないように思えます。 成功したら「アップロード成功!」と固定文字を出す? だったらこのfunctionの中で「$this->errData="アップロード成功!"」とやってるのは意味がない処理ですね。
tkturbo

2016/04/21 02:35

function checkの有効利用例を追記してみました。
fearless0603

2016/04/21 03:28

かなり厳しい添削でしたが、ためになりました!! こんなに言われますとかなり気持ちいいですね(笑) ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問