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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

HTML

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

Q&A

3回答

5621閲覧

CakePHPで,MySQLに保存した画像をHTMLヘルパーを使って表示する方法は??

KinoshitaYusaku

総合スコア175

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

HTML

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

0グッド

1クリップ

投稿2014/12/30 13:20

編集2015/07/01 05:49

プログラム初心者です。

MySQLに保存している画像を、
HTMLヘルパーで表示するにはどのように書けばいいでしょうか?

ちなみに今は、viewのとこに、
下記のようにコードを記述していて、

lang

1<dt><?php echo __('Image'); ?></dt> 2 <dd> 3 <?php echo $this -> Html->image('/contents/'."{$user['User']['id']}", array('alt' => 'ProfileImage')); ?> 4 &nbsp; 5 </dd>

ブラウザではこのように表示されます…。

![イメージ説明]WIDTH:348

どのように書けば画像表示されるのでしょうか…??

どなたか教えて頂けますと幸いです。。。

よろしくお願いします

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

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

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

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

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

lv_sane

2015/03/04 06:09

タイトルが「de」になっているので「で」に変更お願いします。
KinoshitaYusaku

2015/03/04 06:11

ご指摘ありがとうございます。変更しました!
guest

回答3

0

HtmlHelper::image は、デフォルトではapp/webroot/img を参照するようですね

CakePHPでimgディレクトリ以外の画像を表示するには - ノイズビン にあるように、/ をパス指定の先頭に追記することでapp/webroot/ を起点に自由に参照ディレクトリを変えられるのですね


さて、<?php ... image('/contents/'."{$user['User']['id']}", ...); ?> と記述していますが、この出力結果はブラウザで確認されましたでしょうか

どのようにアプリケーションが作成されているかはわかりませんが:

アップロードされたプロフィール画像がapp/webroot/contents/[user_id][file_extention] の形式で保存されているとした場合

記述通りID だけであれば おそらく出力結果に拡張子がないので、ファイルの拡張子を付与する必要があるかもしれません

そうではなく、User テーブルにファイルパスを格納しているカラムがあるのなら、そちらを参照するよう コードを書き換える必要があるでしょう
eg. ... image("/contents/{$user['User']['profile_image_filename']}"); ...


Chrome ほか、ブラウザに用意されている開発者ツールを使って出力されたソースを見てみるのも、問題解決の糸口をつかむひとつの方法です

投稿2014/12/30 17:22

gouf

総合スコア2321

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

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

KinoshitaYusaku

2015/01/02 10:46

goufさん、ありがとうございます! HtmlHelper::image は、デフォルトではapp/webroot/img を参照するのですね…! なるほど!!! そこがよく分かってなかったので、<?php ... image('/contents/'."{$user['User']['id']}", ...); ?>はどこかのサイトのQ&Aを参照にしてテキトーに指定してました。。。 画像はMySQLのusersテーブルのcontentsカラム内に保存していたので、 下記のように記述を変更したら画像表示されました! echo $this -> Html->image('http://●●●●.sakura.ne.jp/cakeSNS/users/contents/'."{$user['User']['id']}", array('alt' => 'ProfileImage')); ?>
guest

0

基本的にはtakayukiinabaさんの方法が良いと思います。
他の方法として、画像のバイナリデータをbase64エンコードしてHTMLに埋め込む方法もあります。
Viewなどで・・

PHP

1<?php 2$img = base64_encode($user['User']['Image']); 3?> 4<img src="data:image/gif;base64,<?php echo $img; ?>">

などとすればよさそうです。

参考URL
http://kaworu.jpn.org/kaworu/2008-04-06-1.php

サムネイルなどの小さい画像であればbase64方式が簡単かもしれませんが、大きい画像だとHTMLが馬鹿でかくなるのでお勧めできません。
別コントローラーの方式だと直リンクされた場合画像を見せたくない場合はいろいろ考慮が必要です。

一長一短あるので合わせて使い分けるのがよさそうです。

投稿2016/07/01 06:12

CodeLab

総合スコア1939

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

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

0

イメージ表示コントローラ
class ImageController extends AppController {

public $name = 'Image'; public $uses = array('TImage'); public $autoRender = false; public $autoLayout = false; // 初期処理 public function beforeFilter() { parent::beforeFilter(); } // 登録イメージ描画処理 public function imageview(){ $param = $this->params['url']['cd']; $rec = $this->TImage->getTImage($param); header("Content-type: " . $rec[0]['t_image']['type']); echo $rec[0]['t_image']['image']; }

}

テーブル定義
CREATE TABLE IF NOT EXISTS t_image (
imagecd int(11) NOT NULL,
cmt varchar(300) DEFAULT NULL COMMENT '画像コメント',
type varchar(50) DEFAULT NULL COMMENT '画像タイプ',
image longblob COMMENT '画像',
name varchar(300) DEFAULT NULL,
size int(11) DEFAULT NULL,
width int(11) DEFAULT NULL,
height int(11) DEFAULT NULL,
delflg tinyint(2) NOT NULL DEFAULT '0',
insdt timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '登録日時'
) ENGINE=MyISAM AUTO_INCREMENT=272 DEFAULT CHARSET=utf8 COMMENT='イメージ登録テーブル';

モデル
public function getTImage($imagecd = null) {

$sql = "SELECT "
. "* "
. "FROM "
. "t_image "
. "WHERE "
. "imagecd = ?;";

$data[] = $imagecd;

   return $this->query($sql,$data);
}

HTML
<img src="/image/imageview?cd='.$imageid.'" />

こちらですが、データベースに保存されているイメージをHTMLイメージタグで表示するロジックになります。
オリジナルソースなので参考までに記載させて頂きます。

投稿2015/07/01 08:39

編集2015/07/01 08:42
takayukiinaba

総合スコア1158

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問