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

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

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

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

1回答

1113閲覧

外見をコントロールする情報をDBに格納すべきなのか

chibi144

総合スコア64

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

1クリップ

投稿2018/04/09 05:54

前提・実現したいこと

既に動いているWEBアプリ(PHP)の改修をしています。

利用者に野菜を選択してもらい、その野菜の分類に応じた画像と注釈を表示するアプリです。
画像は矢印つきで、後付で注釈とリンクを入れています。
イメージ説明

注釈の内容とリンク先の設定はDBで、座標と表示注釈の指定をPHP上で行っています。
画像は全部で15種類ほどあり(以下の例でいう「分類」ごとに1画像準備されています)、今後も少しずつ増える予定です。

DBの元となっているExcelを管理している人と、画像の座標を指示してくる人がそれぞれ別なため、このような管理にしたのですが、
どんどんPHP側が長くなってしまった上に、コードを書いている本人(私)しか座標の指定方法がわからないだろう状態になってしまいました。
座標テーブルを新規に設けてDB側で座標(と表示する注釈)を管理すべきかと思うのですが、
デザイン(外見)のコントロールをDBに任せるという考えが正しいのかどうか自信がありません。

よい知見をお持ちでしたら、
根本的な改善法も含めて教えていただけないでしょうか。

該当のソースコード

野菜テーブル

野菜分類
トマト果菜類
小松菜葉菜類
キャベツ葉菜類
大根根菜類
ニンジン根菜類

症状テーブル
|症状ID(symptomID)|症状(symptom_text)|解決法(solution_text)|解決法詳細PDF(solution_PDF)|
|--|--|--|
|S_001|実がつかない|肥料をやる|T_01.pdf|
|S_002|根が腐る|水をやりすぎない|T_02.pdf|
|S_003|葉が虫に食べられる|農薬の散布|T_03.pdf|
|S_004|葉が変色する|水をやりすぎない|T_02.pdf|
|S_005|可食部が少ない|肥料をやる|T_01.pdf|

php

1 2//座標と文言の指定 3$pos = array( 4 '果菜類' => array( 5 'pos1' => array( 'pos' => 'left:15px;top:260px' , 'text' => 'S_001' ), 6 'pos2' => array( 'pos' => 'left:160px;top:140px', 'text' => 'S_002' ), 7 'pos3' => array( 'pos' => 'left:476px;top:250px', 'text' => 'S_003,S_004' ), 8 ), 9 '葉菜類' => array( 10 'pos1' => array( 'pos' => 'left:20px;top:140px', 'text' => 'S_002' ), 11 'pos2' => array( 'pos' => 'left:246px;top:290px', 'text' => 'S_003,S_004' ), 12 ), 13 '根菜類' => array( 14 'pos1' => array( 'pos' => 'left:20px;top:140px', 'text' => 'S_002' ), 15 'pos2' => array( 'pos' => 'left:246px;top:290px', 'text' => 'S_005' ), 16 'pos3' => array( 'pos' => 'left:420px;top:22px', 'text' => 'S_003,S_004' ), 17 ), 18); 19 20//$symptomには症状テーブルの情報が入っている 21foreach($symptom as $val){ 22 $symptom[$val['symptomID']] = $val; 23} 24 25//$kindに果菜類/葉菜類/根菜類のいずれかが入る 26//画像を貼る 27echo '<img src="image/',$kind,'.png">'; 28 29//$kindに果菜類/葉菜類/根菜類のいずれかが入る 30//文言を貼る 31foreach($pos[$kind] as $key => $val ){ //$kind=="根菜類"で一周目の場合 32 $tmp = explode(',', $val['text']); 33 echo '<ul style="', $val['pos'] ,'">'; //<ul style="left:20px;top:140px"> 34 foreach( $tmp as $tmp_val ){ 35 echo '<li>'; 36 echo $symptom[$tmp_val]['symptom_text']; //echo "根が腐る" 37 //本当はもっとややこしい処理 38 echo '</li>'; 39 echo '</ul>'; 40}

補足情報(FW/ツールのバージョンなど)

PHP 7.2.3
MariaDB 10.1.31
Laravel 5.6.3(現在移行作業中)

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

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

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

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

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

guest

回答1

0

ベストアンサー

座標テーブルを新規に設けてDB側で座標(と表示する注釈)を管理

個人的には運用をする側に問題が無いようであれば、この仕様で良いような気がします。

ただ、今更かもしれないのですが

php

1foreach($pos[$kind] as $key => $val ){ //$kind=="根菜類"で一周目の場合 2 $tmp = explode(',', $val['text']); 3 echo '<ul style="', $val['pos'] ,'">'; //<ul style="left:20px;top:140px"> 4 foreach( $tmp as $tmp_val ){ 5 echo '<li>'; 6 echo $symptom[$tmp_val]['symptom_text']; //echo "根が腐る" 7 //本当はもっとややこしい処理 8 echo '</li>'; 9 echo '</ul>'; 10}

の箇所が気になります。
Laravelを使っているのであれば、上記のループはbladeで、もっと簡単に書けるかもしれません。
検討してみては如何でしょうか?

投稿2018/04/09 06:02

motuo

総合スコア3027

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

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

chibi144

2018/04/13 03:15

お返事したつもりになっていました。 安心してDB側に移植できました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問