画像とテキスト出力 - PHPプロ!Q&A掲示板

2486

  • 0P

画像とテキスト出力

質問日時 / 2010年1月27日 11:32    回答数 / 4件

Questioner:  hiro99  このエントリーをはてなブックマークに追加 

キーワード / mysql    blob    画像   

いつも参考にさせていただいております。私はPHPを学習して4ヶ月目のビギナーです。よろしくお願い申し上げます。

質問内容は次の通りです。
画像をBLOB型、その画像に対するコメントと画像のタイトルをvarchar型でmySQLに保存し、ログインしたユーザーのみにその画像とコメント、タイトルを表示させるプログラムを作っております。そこで、DBに画像とタイトル、コメントは問題なく保存されるのですが、ログイン後の画面の画像表示ページでは、画像しか現れません。環境とコードは下記になります。

環境
  Apache/2.2.11 (Win32) 
  PHP/5.2.9 
  MySQL  5.0.51a 

  1. データベース接続
  2.  $sql = "select * from TABLE where login_id ='".$login_id."'";
  3.  $query = mysql_query($sql, $con);
  4.  $row = mysql_fetch_assoc($query);
  5.   echo $row["image"];
  6.  echo $row["comment"]; 
  7.   echo $row["title"];

上記のコーディングですと、画像は表示されるのですが、タイトルとコメントが表示しません。ちなみに最後のecho文3行の順序を次のように変えますと、 
 
echo $row["comment"]; 
  echo $row["title"];
 echo $row["image"];

今度はタイトルやコメントが出るのですが、画像はバイナリデータの文字変換したもの?の羅列が大量に出てきます。過去の質問履歴を参考にheader関数を入れてみたりして、試したのですが状況は変わりませんでした。

もしかして基本的なところで間違えているのかもしれませんが、この一週間色々試しましたが解決に至らず、この場で質問させていただくことになりました。どなたかご教授でなえればと思います。よろしくお願い申し上げます。

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┗A01shimix2つ前のスレッドが、同じような内容だった・・  
 ┗A01-1hiro99ご投稿ありがとうございます。 ご指摘いただいた投稿
  ┗A01-1-1shimiximg要素のsrc属性に別のphpスクリプトを指定して、そ
   ┗A01-1-1-1hiro99shimix 様 親切なご指導誠にありがとうございます

回答一覧

並び替え:

A01
answerershimix [1月27日 11:39]

2つ前のスレッドが、同じような内容だった・・

  http://www.phppro.jp/qa/2482

この意見に回答する

ツリーへ TOPへ

A01-1
replyerhiro99 [1月27日 14:34]

ご投稿ありがとうございます。
ご指摘いただいた投稿を見逃していました。それを確認しながら、入れ込んでみましたが結果は変わりませんでした。img srcを入れると、画像表示がない状態でバツがでてきます。
Header関数のエラーメッセージも下記のように出てきます。

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\image_kakunin.php:91) in C:\xampp\htdocs\image_kakunin.php on line 130.

そしていまだ文字化けです。まだ初心者なのでこれがヒントになるのかも知れないのですが、その辺が分かりません。本当に情けない限りですがよろしくご指導をお願い申し上げます。

この意見に回答する

ツリーへ TOPへ

A01-1-1 満足
replyershimix [1月27日 14:53] (最終編集:1月27日 14:57)

img要素のsrc属性に別のphpスクリプトを指定して、そのスクリプトで画像ファイルの内容をブラウザに返すこと・・という話になっていたと思います。つまり

  1. echo $row['comment']; 
  2. echo $row['title'];
  3. echo '<img src="imgout.php?id=' . $login_id . '">';

としておいて、imgout.phpで同じようにMySQLからlogin_id = $_GET['id']のレコードを取得して

  1. header('content-type: image/jpeg'); // jpeg画像と仮定して書いてます
  2. echo $row['image'];

を返せばいいということです。

#説明上$_GETの内容のチェックなどは省いていますが、実際にはそのあたりも(元のソースで
#$login_idにセットしているのと同様に)キチンとやってくださいね。

##というかQueryStringで渡さなくてもログインしているなら別の取得方法がありますよね。



なお、「headers already sent」の意味はわかると思いますが、130行目のheaderでヘッダを送信するよりも前に(91行目の時点で)何らかの出力をブラウザに返しているので「すでにHTTPレスポンスヘッダは送出済みです」というだけです。スクリプトで何かを出力する(もしくはスクリプトを抜けてhtmlとしてブラウザに返す)場合には自動的にレスポンスヘッダも送出されます。そのあたりはマニュアルにもちゃんと書かれていますので熟読してください。

  http://www.php.net/manual/ja/function.header.php

----------------- 引用ここから -----------------
覚えておいて頂きたいのは、header() 関数は、 通常の HTML タグまたは PHP からの出力にかかわらず、すべての実際の 出力の前にコールする必要があることです。 頻出するエラーとして、include() または require() 関数、他のファイルをアクセスする関数に 空白または空行があり、header() の前に出力が 行われてしまうというものがあります。同じ問題は、単一の PHP/HTML ファイルを使用している場合でも存在します。 
----------------- 引用ここまで -----------------

この意見に回答する

ツリーへ TOPへ

A01-1-1-1
replyerhiro99 [1月28日 09:46]

shimix 様

親切なご指導誠にありがとうございます。おかげさまで上手く画像とテキストを表示することができました。

ところで、shimix 様のおっしゃるQueryStringで渡さなくてもログインしているなら別の取得方法と言うものはどのようなものでしょうか?まだまだ勉強不足で申し訳ありませんが、ヒントでもよろしいのでお教えください。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
負荷時のmysql_connect()エラー
 このエントリーをはてなブックマークに追加 
A
これはPHPというよりOSまたはMySQLのコミュニティで質問されたほうがいいと思います。 ぱっと思いついた範囲で記すと MySQL等のDBに「ある時点において同時に接続可能なクライアントの最大数」に制限があるよう...

>>続きを読む

今回のような実践的な経験がエンジニアのキャリアに繋がると思います。是非サービスを成功させて下さい!

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)