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

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

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

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

PHP

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

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

Q&A

解決済

3回答

6079閲覧

PHP、MySQLを用いて画像付き掲示板を作成したい

___shiro

総合スコア15

MySQL

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

PHP

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

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

0グッド

1クリップ

投稿2016/07/28 02:51

「やり方」もですが、「考え方」も分からなかったので、質問させていただきます。

やりたいこと
・画像付きの掲示板を作成したい
⇨ユーザー名、コメント、画像を登録されているものを全て出力
・BLOB形式のファイルをすべて取り出したい
できていること(全て別のphpファイル)
・DBに画像、コメント、ユーザー名の登録(記事IDは登録順に自動保存)
・DBに登録されているコメント、ユーザー名をすべて表示
・DBに登録されているBLOBファイルを1枚のみ出力する

とりあえず、対応する画像と内容を登録されている分出力したいと考えています。
テーブルは、
ID|content|IMG
1 |ohayou |[BLOB - 13.2KiB]
2 |oyasumi |[BLOB - 3.2 Kib]
(以下略)

のように作られています。

完成イメージは、
[画像]
ohayo
[画像]
oyasumi
というように表示されるものです。

PHP

1//DB接続後 2 $sql ="SELECT IMG,content FROM IMAGES "; 3 $stmt = $pdo->query($sql); 4 if(!$stmt){ 5 $info = $pdo->errorInfo(); 6 exit($info[2]); 7 } 8 while ($data = $stmt ->fetch(PDO::FETCH_ASSOC)) { 9 header("Content-Type: image/jpeg"); 10 echo $data['IMG']; 11 echo $data['content']; 12 }

と書けば登録されている分が表示されると思ったのですが、
1枚目の画像しか表示されません。(contentですら出力されません)

この書き方というか、headerを用いると1枚しか画像の取得はできないのでしょうか?
それともこのような書き方で複数枚出力することは可能なのでしょうか?

取得と表示は別に行う、というものを見たことがあるので、

PHP

1print("<img src=img_get.php>");

というものを別のphpファイルとして作成、表示することは成功しているのですが、img_get.phpには1枚しか画像の取得ができていないため、当たり前ですが内容がある分同じ画像が出力されるという現状です。

考え方、コードの改善の仕方を教えていただけると助かります。

以上、よろしくお願いしますよろしくお願いします。

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

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

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

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

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

asahina_dev

2016/07/28 03:32

画像とコンテンツを同時に返したい理由はなんですか? data スキームを使えば対応は可能ですが
___shiro

2016/07/28 07:13

返したい理由、というか、その方法で実装することを思いついたからやってみているだけで、拘りはありません。
___shiro

2016/07/28 07:14

途中送信してしまいました。より適切な方法があればそちらでやるべきだと思います。
guest

回答3

0

ベストアンサー

よくありがちな勘違いだと思いますが
画像呼び出しファイル一つにつき呼び出される画像は1つです。

HTML

1<img src="load.php?id=1"> 2<img src="load.php?id=2"> 3<img src="load.php?id=3">

のように呼び出したいかずだけimgタグをつかってユニークに呼び出してください

もし複数のファイルを1回で呼びたいということであれば
なんらかのファイルの合成処理が必要になります。

投稿2016/07/28 03:30

yambejp

総合スコア114572

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

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

___shiro

2016/07/28 07:26

なるほど。idか何かを振ってあげてそこで格納しているもの、取り出すものを変えるというイメージなのでしょうか? たぶん、その前にimg_get.phpのような画像を取得する部分を変更しなければなりませんよね。 なんとなくもう少し考えてみます…。
___shiro

2016/07/28 07:49

ヒントを元に改善したところ無事動きました。ありがとうございました!
guest

0

headerはHTTPヘッダを送出するモノなので、同じヘッダは一度きりのモノです。
おそらくHTTPプロトコルに対する知識が甘い気がするので、時間があれば調べて見ていただけると、エンジニアとして一皮剥けると思います。

解決策ですが、質問文のループ部分を以下のように書いて見ていただけますか。

php

1 while ($data = $stmt ->fetch(PDO::FETCH_ASSOC)) { 2 //Base64でエンコードされた画像を直接表示する 3 echo '<img src="data:image/jpeg;'.base64_encode($data['IMG']).'">'; 4 echo $data['content']; 5 }

HTMLのimgタグは、画像データを直接渡しても表示出来る仕様がありますので、こちらで行けるのでは無いでしょうか。

投稿2016/07/28 03:34

kunai

総合スコア5405

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

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

___shiro

2016/07/28 07:24

どの部分を勉強すれば良いのか分からなかったので、教えていただけて助かります。コードを書きながら調べてみたいと思います。 画像がうまく表示されないですが、画像(壊れている)コメント画像コメントのように登録されている数分は出力されました。画像が見れないのはどこに原因があるのでしょうか…。httpプロトコルを勉強すれば分かる部分なのでしょうか?
guest

0

まったく違う回答ですが、画像はDBに格納しないでファイルに格納した方が使い勝手良くないでしょうか?
そうすればPHPで画像を出力する実装をする必要もないですし。
投稿された画像の確認も楽ですし。
一般的な画像掲示板がどういう仕組みかはわかりませんが、自分が作るならそうします。

投稿2016/07/28 04:00

ttyp03

総合スコア16996

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

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

___shiro

2016/07/28 07:29

ファイルに格納とはどういった意味なのでしょうか。理解力不足ですみません。
ttyp03

2016/07/28 07:32

いや、普通に画像ファイルとしてフォルダに置く、ということです。 DBの方には、そのファイル名を持っておけば良いかと。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問