• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:phpからmysqlにデータ保存(テキストと画像))

phpからmysqlにデータ保存(テキストと画像)

このQ&Aのポイント
  • 登録フォームを作成し、PHPにてMYSQLに情報を保存しようとしています。
  • テキストデータは問題なく保存できるのですが、画像データが保存できません。
  • いろいろ調べているのですが、テキストデータと画像データをいっぺんに保存する方法がわかりません。なんとなくはどこらへんが問題なのかということはわかるのですが、具体的にどうすればいいかがわかりません。

質問者が選んだベストアンサー

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.5

どうやって使うかが決まらないうちに(どうやって使うかが理解出来ていないのに)、データを格納する部分を作るというのはおかしな話です。 >mysqlに格納してあるデータを検索して表示する ということですから、その検索結果でレコードを特定出来るキーを渡します。でないと画像データが特定できません。「画像を返すスクリプト」は渡されたキーで所定のレコードを読み出して、そこに格納されている画像データを(適切なhttpレスポンスヘッダとともに)ブラウザに返します。 当然ですがimg要素を組み立てるときには、すでにそのデータを読んでいる(なのでキーを渡せる)ということです。 #本来であれば、その時点でキャッシュさせるなどの手法を #採りたいところですが、それは今後の課題ということで(汗 なお、デバッグ時にはとりあえずキーを(QueryStringで渡さずに)決め打ちしてもいいです。まずは画像を表示できることを確認するのが先ですから(これを先にやってみた方がいいと思います)。

lolololol
質問者

補足

ご回答ありがとうございます。 表示したい画像を特定するキーは、mysqlに保存した時に割り振りしているidを使いたいと考えています。 そうすると、 <?php echo '<img src="get_image.php?..... の「?」の後に、割り振ってあるidを入れて画像を特定し、get_image.phpファイルにて画像を読み出すという理解なのですがいかがでしょうか?

その他の回答 (4)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.4

えっと・・・ 「ブラウザに画像を返す」というときには(ブラウザのアドレスバーにURLを直接入力する以外では)img要素のsrc属性として指定するしかありませんが、それは理解されていますか? データベースから画像を返すような場合には、そのsrc属性に <img src="gazou.php?id=1234" /> などとphpスクリプトを指定して、そのスクリプトがデータベースから画像データを読み込んで「画像データを(適切なhttpレスポンスヘッダとともに)返す」ことになります。 src属性で画像ファイルを指定したらwebサーバがそのファイルをブラウザに返しますが、そのときの動作をphpスクリプトで再現することになります。なのでwebサーバが(httpレスポンスヘッダなど)どう動いているのかがわかっていないといけません。このあたりをキチンと理解していないと保存しても意味がありませんよ(汗

lolololol
質問者

補足

ご回答ありがとうございます。 調べているうちにいろいろと錯誤してしまっていました。 今回、mysqlに格納してあるデータを検索して表示する中の1つの項目が画像なのですが、<img src="....phpのあとの「id=~~」の部分をどう書けばいいのかわかりません。検索結果として画像を表示するので、検索の際渡したidをそのまま使うのだろうとは思っています。 度々申し訳ありませんが、検索結果として表示する際について、idについてもう少しヒント、アドバイスよろしくお願いします。

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.3

>表示の際、<?php echo $row['image1']; ?>としているのですが、 ブラウザに「画像データ」を返すのですから、先に header('content-type: image/jpeg'); などのhttpレスポンスヘッダを送出しておかないといけません(mimeタイプはデータによります)。当然、当該スクリプトではhttpヘッダと画像データ以外のものをブラウザに返してはいけません。

lolololol
質問者

補足

ご回答ありがとうございます。 ご指摘頂いた点修正加えて見たのですが、今度は何も表示されなくなりました。 調べていると<img src="◯◯.php" ... とし、別途phpファイルでローダーを作った上で読み込ませるといった方法もあるみたいなのですが、どちらが方法として良いということはあるのでしょうか?

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

form要素にenctype属性がありません。 <form method="post" action="" enctype="multipart/form-data"> と書いてください。 >それとも、もっと別にコードを書く場所を設けるべきでしょうか? 今現在、 $image1 = $_POST['image1']; と書いている部分を $image1 = isset($_FILES['image1']) ? file_get_contents($_FILES['image1']['tmp_name']) : ""; などとするだけだと思います。

lolololol
質問者

補足

ご回答ありがとうございます。 ご指摘頂いたように修正してみたところ、とりあえずはきちんと動作(?)したようです。 きちんと保存されているか確認のため、phpを使って出力してみているのですが、ずらっと文字列(文字化けともなんとも言いがたい・・)が並んで画像として表示がされません。 表示の際、<?php echo $row['image1']; ?>としているのですが、これは単純に出力のためのコードが間違っているのか、それともそもそもきちんと保存されていないのか、どちらになるのでしょうか? 度々申し訳ありませんが、ご教示いただけないでしょうか。

回答No.1

画像ファイルを取得する際のお作法に誤りがありますよ。 $_FILESを利用しましょう。 さらにDB側はBLOB型なわけですから、ファイルパスなどではなく バイナリデータを格納しなければなりません。 $_FILES['tmp_name']にサーバにアップロードされたファイルが あるので、それを読み込んで書きこむ必要があります。 http://php.net/manual/ja/reserved.variables.files.php

lolololol
質問者

補足

ご回答ありがとうございます。 なるほど、そうですね。 調べてみると$_FILESに関するサイトがいっぱいでてきたのですが、少し引っかかる部分があります。 それは、画像に関するコードを書く場所なのですが、「DBに接続する」の後、「&q = sprintf.....」の前にそのまま書いてしまってもいいものなのでしょうか? それとも、もっと別にコードを書く場所を設けるべきでしょうか? アドバイスご教示よろしくお願いします。