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

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

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

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

Q&A

解決済

1回答

869閲覧

PHPでfunctionを読み込み動作させたい

uep3vjz9wp

総合スコア20

PHP

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

1グッド

0クリップ

投稿2018/12/05 15:09

編集2018/12/05 15:28

お世話になります。
#####やりたいこと
下記のfunction_category.phpをtest.phpで読み込み、動作させたい。
カテゴリを数字でmariaDBへ登録し、呼び出し時に数字を日本語に変換して表示させています。
カテゴリが現在は4つですが、今後10以上に増えるので書き換えが容易になるよう外部ファイルにしたいです。

function_category.php

php

1<?php 2function categoryDisplay_function(){ 3 if ($row['category'] === '1') $tmp = "いちばん"; 4 if ($row['category'] === '2') $tmp = "にばん"; 5 if ($row['category'] === '3') $tmp = "さんばん"; 6 if ($row['category'] === '4') $tmp = "よんばん"; 7 8echo "関数テスト表示"; 9}

test.php

php

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4<meta charset="UTF-8"> 5<title>試験web</title> 6</head> 7<body> 8<h3>試験web</h3> 9 10<?php 11require_once 'db_config.php'; 12require_once 'function_category.php'; 13 14try { 15 $dbh = new PDO("mysql:host=localhost;dbname=$databasename;charset=utf8", $user, $pass); 16 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 17 $sql = "SELECT * FROM $dbtablename 18 WHERE hizuke >= DATE_ADD(NOW(), INTERVAL -3 MONTH) 19 ORDER BY hizuke"; 20 $stmt = $dbh->query($sql); 21 $result = $stmt->fetchAll(PDO::FETCH_ASSOC); 22 echo "<table width=100% border=1 cellspacing=1> \n"; 23 echo "<tr>\n"; 24 echo "<th>日付</th><th>内容</th><th>カテゴリ</th>\n"; 25 echo "</tr>\n"; 26 foreach ($result as $row) { 27 echo "<tr>\n"; 28 echo "<td>" . htmlspecialchars($row['hizuke'],ENT_QUOTES,'UTF-8') . "</td>\n"; 29 echo "<td width=50%>" . nl2br(htmlspecialchars($row['naiyou'],ENT_QUOTES,'UTF-8')) . "</td>\n"; 30 31 32 categoryDisplay_function(); 33 34/* 関数で以下を読み込み 35 if ($row['category'] === '1') $tmp = "いちばん"; 36 if ($row['category'] === '2') $tmp = "にばん"; 37 if ($row['category'] === '3') $tmp = "さんばん"; 38 if ($row['category'] === '4') $tmp = "よんばん"; 39*/ 40 41 echo "<td>" . htmlspecialchars($tmp ,ENT_QUOTES,'UTF-8') . "</td>\n"; 42 43 echo "</tr>\n"; 44 } 45 echo "</table>\n"; 46 $dbh = null; 47} catch (PDOException $e) { 48 echo "エラー発生: " . htmlspecialchars($e->getMessage(), ENT_QUOTES, 'UTF-8') . "<br>"; 49 die(); 50} 51 52?> 53 54 55</body> 56</html>

1.function_category.php内の「echo "関数テスト表示";」の「関数テスト表示」は
表示されるのでファイルは読み込まれています。
2.test.php内の「/* 関数で以下を読み込み」の「/」「/」を外すとcategoryは日本語で表示され、動作します。
3.category以外の動作に支障はありません。
4.エラー表示は出ていません。function_category.phpを読み込み、データベースに登録している数字を日本語に変換したいのですが、カテゴリだけが空白となります。function_category.phpの記述方法が悪いのか他に原因があるのかを知りたいと思っています。

ご教示お願いします。

kei344👍を押しています

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

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

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

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

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

kei344

2018/12/05 15:14

「何」が「どのように」わからないのか、コードのどの部分で詰まっているのかなどを、出ているエラーなどと併せて、具体的に記述されたほうが回答を得られやすいと思います。
uep3vjz9wp

2018/12/05 15:22

すみません。エラー表示は出ていません。function_category.phpを読み込み、データベースに登録している数字を日本語に変換したいのですが、カテゴリだけが空白となります。function_category.phpの記述方法が悪いのか他に原因があるのかを知りたいと思っています。
kei344

2018/12/05 15:26

(質問文は編集できます)この「質問への追記・修正の依頼」の部分はデフォルトで表示されませんので、質問本文に追記することをお勧めします。
uep3vjz9wp

2018/12/05 15:29

ありがとう御座います。追加いたしました。
guest

回答1

0

ベストアンサー

呼び出し元と処理を共有したい場合、多くの場合は切り出しただけでは期待通りには動作しません。
(変数のスコープ、関数の引数、関数の戻り値について調べてみて下さい。)

具体的なソースとしては

PHP

1<?php 2//関数の中で$rowを使うには呼び出し側から渡してもらわないといけない 3//関数定義時に指定した変数に呼び出し元から渡された値が入って使えるようになる 4function categoryDisplay_function($row){ 5 if ($row['category'] === '1') $tmp = "いちばん"; 6 if ($row['category'] === '2') $tmp = "にばん"; 7 if ($row['category'] === '3') $tmp = "さんばん"; 8 if ($row['category'] === '4') $tmp = "よんばん"; 9 10 return $tmp; 11}

PHP

1 //呼び出し元からは関数内で必要な引数を渡してやる必要がある($row) 2 //処理結果を共有するには戻り値で受け取ってやる必要がある($tmp) 3 $tmp = categoryDisplay_function($row); 4

という感じで動くと思います。

投稿2018/12/05 15:18

tanat

総合スコア18713

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

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

uep3vjz9wp

2018/12/05 15:34

//関数の中で$rowを使うには呼び出し側から渡してもらわないといけない //関数定義時に指定した変数に呼び出し元から渡された値が入って使えるようになる //呼び出し元からは関数内で必要な引数を渡してやる必要がある($row) //処理結果を共有するには戻り値で受け取ってやる必要がある($tmp)  この4つが大変参考になりました。何か足りない気がすると思っていたのですが考え方がわかりました。大変勉強になりました。本当にありがとうございました。
tanat

2018/12/05 15:49

良かったです。 これらのルールは自作関数だけでは無く、標準関数でも同様に行われているものなので使う時に意識してみるとより理解が進みやすいかと思います。 例えば質問のコードで使用されている htmlspecialchars() は引数として文字列とオプション、戻り値としてHTMLエスケープ済みの文字列を返す関数なので、 echo "<td>" . htmlspecialchars($tmp ,ENT_QUOTES,'UTF-8') . "</td>\n"; ↓ $escapedStr = htmlspecialchars($tmp ,ENT_QUOTES,'UTF-8'); echo "<td>" . $escapedStr . "</td>\n"; としても処理内容は同じことになります。(元の書き方の方がシンプルで良いとは思いますが、例ということで。)
uep3vjz9wp

2018/12/05 15:57

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問