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

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

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

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

HTML

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

Q&A

解決済

4回答

1802閲覧

[PHP] functionで呼び出した後の文字の出力!!助言おねがいします!!

fearless0603

総合スコア41

PHP

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

HTML

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

0グッド

0クリップ

投稿2016/04/05 01:34

編集2016/04/05 01:45

phpでファイルアップロードしたものを、functionでバリデーション化させたものを作成しています。

htmlで表示させたときに下のhtmlのコードでecho $ret1としたときに、文字を前の文字の続きに出力させたいのですが、画面上部に出力されてしまいます。どうしたらいいでしょうか。
return の後にはfalseを戻り値として設定することは前提でお願いします・・・!

画面にはこのように表示されます。


アップロード成功!jpg,pdf,png の形式ではありません。jpg,pdf,png形式のファイルのみアップロードできます。ファイルが参照されていません。
checkというfunctionを実行します

引数にcertificationを指定した場合の処理結果は

引数にcert_sealを指定した場合の処理結果は

引数にcitizenを指定した場合の処理結果は


「処理結果は」の後に文字を出力させたいです。

PHP

1コード 2<?php 3 4//定義したクラスからオブジェクト(型)を生成する。$uploadはインスタンス 5$upload = new upload(); 6 7// 引数定義(配列で) 8$filename = array('certification','cert_seal','citizen'); 9 10// function呼び出し 11$ret1 = $upload->check($filename[0]); 12$ret2 = $upload->check($filename[1]); 13$ret3 = $upload->check($filename[2]); 14 15//uploadの設計図 16class upload{ 17 //エラーメッセージの箱 18 public $err_message = array( 19 "ファイルが参照されていません。", 20 "jpg,pdf,png の形式ではありません。jpg,pdf,png形式のファイルのみアップロードできます。", 21 "ファイルサイズが大きすぎますので2MB以下にしてください。", 22 " アップロード成功!" 23 ); 24 25 // function定義 26 //バリデーションメソッドを定義 27 function check($filename){ 28 // グローバル変数に引数の値を設定する 29 $this->err_message; 30 31 if(is_uploaded_file($_FILES[$filename]["tmp_name"])){ 32 if(preg_match("(.+\.(jpg|pdf|png))",$_FILES[$filename]["name"])){//jpgかpdf,pngしかアップできない 33 $filesize = filesize($_FILES[$filename]['tmp_name']); 34 if($filesize <= 2097152){ 35 //ファイルをfilesフォルダに保存move_uploaded_file($filename,$updir); 36 echo $this->err_message[3]; 37 } else { 38 echo $this->err_message[2]; 39 return false; 40 } 41 } else { 42 echo $this->err_message[1]; 43 return false; 44 } 45 } else { 46 echo $this->err_message[0]; 47 return false; 48 } 49 } 50} 51 52?>

HTML

1コード 2<body> 3 <p>checkというfunctionを実行します</p> 4 <p>引数に<?php echo $filename[0]; ?>を指定した場合の処理結果は<?php echo $ret1;?></p> 5 <p>引数に<?php echo $filename[1]; ?>を指定した場合の処理結果は<?php echo $ret2;?></p> 6 <p>引数に<?php echo $filename[2]; ?>を指定した場合の処理結果は<?php echo $ret3;?></p> 7 8</body>

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

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

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

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

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

guest

回答4

0

ベストアンサー

アップロード成功!jpg,pdf,png の形式ではありません。jpg,pdf,png形式のファイルのみアップロードできます。ファイルが参照されていません。

↑これが先頭に出力されてるのは期待通りの動きなんですかね?
そもそもfunction checkの中でechoしちゃってる関係上、処理順序的にここで出るのは当たり前なんだけど。

echo $ret1としたときに、文字を前の文字の続きに出力させたい

$ret1のときは「引数にcertificationを指定した場合の処理結果はアップロード成功!」と出力させたいってこと?

だったら$ret1、$ret2、$ret3と同様に$message1、$message2、$message3とかを準備しときゃいいんじゃないかなぁ。

class upload{ //check結果のメッセージ public $message; //エラーメッセージの箱 public $err_message = array(

こんな風にインスタンス変数を追加、checkでechoしてるとこは

if($filesize <= 2097152){ //ファイルをfilesフォルダに保存move_uploaded_file($filename,$updir); $this->message = $this->err_message[3];

みたいにして。んで、1回checkを呼び出すたびに

$ret1 = $upload->check($filename[0]); $message1 = $upload->message;

こんな風にしとけばhtml部の記述は

<p>引数に<?php echo $filename[0]; ?>を指定した場合の処理結果は<?php echo $message1;?></p>

。。。となるんじゃ?

投稿2016/04/05 02:12

tkturbo

総合スコア5572

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

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

0

constを使って、やると、後で、echoの後に出力されました。

PHP

1コード 2 3/定義したクラスからオブジェクト(型)を生成する。$uploadはインスタンス 4$upload = new upload(); 5 6// 引数定義(配列で) 7$filename = array('certification','cert_seal','citizen'); 8 9 10// function呼び出し 11$ret1 = $upload->check($filename[0]); 12$ret2 = $upload->check($filename[1]); 13$ret3 = $upload->check($filename[2]); 14 15 16 17//uploadの設計図 18class upload{ 19 20 const NOT_EXIST = "ファイルが参照されていません。"; 21 const NOT_SUITABLE = "jpg,pdf,png の形式ではありません。jpg,pdf,png形式のファイルのみアップロードできます。"; 22 const ERR_MSG_FILE_SIZE = "ファイルサイズが大きすぎますので2MB以下にしてください。"; 23 const SUCCESS = "アップロード成功!"; 24 25 public $message; 26 27 // function定義 28 //バリデーションメソッドを定義 29 public function check($filename){ 30 // グローバル変数に引数の値を設定する 31 $ret = false; 32 if(is_uploaded_file($_FILES[$filename]["tmp_name"])){ 33 if(preg_match("(.+\.(jpg|pdf|png))",$_FILES[$filename]["name"])){ 34 $filesize = filesize($_FILES[$filename]['tmp_name']); 35 if($filesize <= 2097152){ 36 return $this->message=self::SUCCESS; 37 $ret=true; 38 } else { 39 return $this->message=self::ERR_MSG_FILE_SIZE; 40 } 41 } else { 42 return $this->message=self::NOT_SUITABLE; 43 } 44 } else { 45 return $this->message=self::NOT_EXIST; 46 } 47 return $ret; 48 } 49} 50 51 52 53?> 54 55<!doctype html> 56<html lang="ja"> 57<head> 58<meta charset="utf-8"> 59<meta http-equiv="X-UA-Compatible" content="IE=edge"> 60<meta name="viewport" content="width=device-width, initial-scale=1"> 61 62<title> アップロード </title> 63 64</head> 65<body> 66 <p>checkというfunctionを実行します</p> 67 <p>引数に<?php echo $filename[0]; ?>を指定した場合の処理結果は<?php echo $ret1;?></p> 68 <p>引数に<?php echo $filename[1]; ?>を指定した場合の処理結果は<?php echo $ret2;?></p> 69 <p>引数に<?php echo $filename[2]; ?>を指定した場合の処理結果は<?php echo $ret3;?></p> 70 71</body> 72</html> 73

投稿2016/04/05 07:37

fearless0603

総合スコア41

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

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

0

return の後にはfalseを戻り値として設定することは前提でお願いします・・・!

↑こういうことは質問に追記いただけると後の方がわかりやすいので、お願いします。。
↓出したいところで直接関数を実行する手もあります。変数をあとから使うなら変数 $ret1 に代入してから echo するのも手段です。

PHP

1<body> 2 <p>checkというfunctionを実行します</p> 3 <p>引数に<?php echo $filename[0]; ?>を指定した場合の処理結果は<?php echo $upload->check($filename[0]);?></p> 4 <p>引数に<?php echo $filename[1]; ?>を指定した場合の処理結果は<?php echo $upload->check($filename[1]);?></p> 5 <p>引数に<?php echo $filename[2]; ?>を指定した場合の処理結果は<?php echo $upload->check($filename[2]);?></p> 6</body>

投稿2016/04/05 01:53

kei344

総合スコア69364

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

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

fearless0603

2016/04/05 01:58

$ret1 = $upload->check($filename[0]);と書かなくてもいいんですね!ありがとうございます!
kei344

2016/04/05 04:36

解決されましたか? もし解決されたのであれば、ひとまず「解決済」にされてはいかがでしょうか。
guest

0

echo $this->err_message[3];
などとなっている4箇所を
return $this->err_message[3];
に変えてはいかがでしょうか。

投稿2016/04/05 01:43

harumakiyukko

総合スコア20

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

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

fearless0603

2016/04/05 01:44

すいません return の後にはfalseを戻り値として設定することは前提でお願いします・・・!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問