• ベストアンサー

PHPにて画像登録および検索

こんにちは。PHP4.3およびMySQL4.0、apachaを触り始めて1ヶ月ほどの初心者です。現在、良さそうな本を3冊ほど購入しましたが、題名にある、クライアント上のブラウザからMySQLへ画像を登録するシステムを想定しながら学んでいる状況です。 通常のテキストなどは登録・検索は出来るようになったのですが、本を見ても1冊は、PEARによるスクリプト(PEARの基礎は触れてない。選んだ本が間違えだったのですが…)。他の本ではディレクトリに保存のサンプルしかありませんでした。 こちらの「教えて!goo」や、他のサイトでも似たような質問がありますが、初心者の私には的を得ることが難しく、実際に動かしながら理解を深められればと、諸先輩方々のアドバイスを頂戴したく投函させて頂きました。 サンプルコードも含め、良いサイトなどご教授頂ければ幸いです。宜しくお願い致します。

  • MySQL
  • 回答数12
  • ありがとう数19

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

  • ベストアンサー
  • petit-C
  • ベストアンサー率46% (7/15)
回答No.12

表示スクリプト(2)がおかしいです。 画像ファイルは、バイナリ形式で、HTMLとは違いますので、 表示方法、というか、出力方法が違います。 HTMLを作るとき、画像は、<img src=...と入れますよね。 srcの先は、HTMLやテキスト形式ではないファイルで、たとえば、テキストエディタなどで開けません。 FORMで、アップロードをかけるのは、このためです。 画像をPHPで出力する場合は、HTTPヘッダーと実際の画像のデータ以外は、出力しません。 したがって、PHPファイルは、 <?php から、必ず始まり、「?>」で閉じる前に、 exit; してしまうのが、一般的です。 表示スクリプト(2)の場合、<?php ~ ?>以外の場所はすべて削除してください。 ちなみに、Warning: Cannot modify header informationというのは、header()というHTTPヘッダを出力する関数の前に、<!doctype...という出力があるせいで発生する警告です。<?phpの前を消して、エラーがなくなれば、この警告は消えます。 それから、mysqlコマンドで---がいっぱいあるのは、たぶん、うまくデータが入っているからだと思います。

sadacha
質問者

お礼

peit-Cさま こんにちは。表示することが出来ました! 初心者の私にpetit-Cさんをはじめ、皆様方のご親切なアドバイスには本当感謝しております。 自分で学んでいくのは勿論ながら、今後、またアドバイスを頂戴したく投函させて頂くかと思いますが、その際にはまた宜しくお願い申し上げます。 有難う御座いました。

その他の回答 (11)

  • petit-C
  • ベストアンサー率46% (7/15)
回答No.1

登録 ・BLOB型、もしくは、MEDIUMBLOB型などのカラムを準備  (MySQLのBLOBはバイナリを入れるもの) ・filegetcontentsなどで、バイナリを取得  (一時ファイルの退避をしないで、変数に入れる) ・バイナリをaddslashesして、insert文に入れる('でクオートして)  (文字列だと思って挿入) 表示 ・<img src="image.php..でなどでHTMLからリンク (直接叩いてもいけますが。) ・image.phpでContent-type: image/jpegとか出力 (gifやpngかも知れませんが。) ・image.phpでSELECTして、カラムの内容をそのまま表示 (そのままprintやechoです。) 表示のときに、勝手にmb_convert_encodingがかかる場合があるので、while(@ob_end_clean());とかかけてください。

参考URL:
http://q.hatena.ne.jp/1141838059
sadacha
質問者

お礼

petit-C様 はじめまして、こんばんは。ご親切な回答を有難う御座います。お恥ずかしながら、お教えいただいたサイトを参考に、下記のようなスクリプト(画像の他に文章を登録)を設置してみましたが、上手く登録することはが出来ません。 ちなみに… DB名:test テーブル名:image 各フィールドは:id(int),img_data(BLOB),name(char) となっています。 引き続きご指導、ご指摘など伺えたら幸いです。

sadacha
質問者

補足

**登録スクリプト** <!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <TITLE>データベースへの画像の格納</TITLE> </HEAD> <body> <P>ファイルのアップロード</P> <FORM method="POST" enctype="multipart/form-data" action="<?echo $PHP_SELF;?>" <INPUT type="hidden" name="MAX_FILE_SIZE" value="65536"> 画像のファイル名を入力してください(最大64KByte)<br> <INPUT size="30" type="file" name="upfile"><BR> <input type="text" name="name" value="<?=$_POST['name']?>" size="18"> <BR> <INPUT type="submit" name="submit" value="送信"> <INPUT type="reset" name="reset" value="リセット"> </FORM> <br><br> <?php if ($_POST["submit"]!="") { if ($_FILES["upfile"]["tmp_name"]=="none") { print("ファイルのアップロードができませんでした。<BR>\n"); exit; } $fp = fopen($_FILES["upfile"]["tmp_name"], "rb"); if(!$fp) { print("アップロードしたファイルを開けませんでした"); exit; } $imgdat = fread($fp, filesize($_FILES["upfile"]["tmp_name"])); fclose($fp); print("ファイルサイズ:{$_FILES["upfile"]["size"]}<BR>\n"); $len = strlen($imgdat); print("データ長 = $len<BR>"); $imgdat = addslashes($imgdat); $con = mysql_connect("localhost", "root", "******"); if (!$con) { print("MySQLへの接続に失敗しました"); exit; } if (!mysql_select_db("test")) { print("データベースへの接続に失敗しました"); exit; } $sql = "INSERT INTO image(img_data) values(0, '$imgdat', '$name')"; //$sql = "INSERT INTO image values(0, '$imgdat', '$name')"; $result = mysql_query($sql); if (!$result) { print("SQLの実行に失敗しました<BR>"); print(mysql_errno().": ".mysql_error()."<BR>"); exit; } mysql_close($con); } ?> </BODY> </HTML> **確認スクリプト** <!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <title>確認</title> </head> <body> <?php mysql_connect('localhost','root','******'); mysql_select_db('test'); $sql= "select * from image"; $result = mysql_query($sql); $rows = mysql_num_rows($result); if($rows == 0){ echo "<p>該当データがありません。</p>"; } else { while($row = mysql_fetch_array($result)){ echo "<p>"; echo $row["id"]; echo "<br/>"; echo $row["img_data"]; echo "<br />"; echo $row["name"]; echo "<br />"; echo "</p><hr />"; } } ?> </body> </html>

関連するQ&A

  • プログラムの記述のあるPHPファイルをHTML化

    こんばんは。お世話になってます。 タイトルにあるように、PHPファイルをHTMLファイルとして別名で設置させるコードを考えているのですが、どのようにしたら良いのかが、全く分かりません。 例えば・・ ~basic.php~ <html> <head> <title></title> </head> <body> <?php //DB接続 //データ呼び出し while($row = mysql_fetch_array($result)){  ・  ・ } ?> </body> </html> という基本となるphpファイルを設置しておき、問合せ結果をhtmlファイルとして別名で保存していきたいと考えているのですが、具体的にどのようなアルゴリズム?となるのでしょうか? 本を見ながら、PEARにも挑戦してみましたが、コマンドでインストールが完了したはずですが、本や多くのサイトで紹介されているように、C:/PHP/PEAR/HTML というディレクトリが確認できずに、PEARの利用は難しいのかな?と・・。 PEARのアドバイスも頂戴出来たら幸いですが、本題の通り、上記質問のようなPHPファイルを別名でのHTMLファイルとして保存させるための流れをお教えいただければと思います。 お忙しいとは思いますが、宜しくお願い致します。。

    • ベストアンサー
    • PHP
  • PHP+MySQL 画像保存

    MySQLに画像ファイルを蓄積するためには、どうしたらいいのかわかりません。 本のデータベースを作成していますが、本のデータを登録する際に、ISBNを入力するとamazonからデータを取得して、そのデータをMySQLに蓄積するにはどうしたらいいか教えてください。サンプルっソース等・概要図(システム概要図みたいなの)があると助かります。 どなたかよろしくお願いします。

    • 締切済み
    • PHP
  • 【PHPとMySQLで登録・ログインフォームを作りたい】

    【PHPとMySQLで登録・ログインフォームを作りたい】 お世話になっております。 この度、大学の研究室のIP管理をすることになり、ホスト名を登録するフォームを作ろうと思っています。 そこで勉強も兼ねてPHPとMySQLを使って登録フォームとログインフォームを作りたいのですが中々参考になるサイトが見つからないのでよろしければサンプルや解説などがあるサイトを教えていただけると嬉しいです。 流れとしては 登録フォームでIDとパスワードを設定 ↓ ログインフォームでログイン ↓ 管理画面でホスト名を設定 で考えております。 登録フォームの作り方(PHPのフォームで文字を受け取りSQLに格納)の方法が分かれば管理画面もすぐ作れるかなと考えております。 参考になるサイトや解説サイト、サンプルサイトがあれば教えてください。お願いします。 フォームからの文字の受け取り方、SQLの格納の仕方など些細なことでもかまいません。お願いします。

    • ベストアンサー
    • PHP
  • PHPとACTION SCRIPTの連携

    PHPとACTION SCRIPTの連携 サーバー(レンタルサーバ)側でMYSQLのデータをからPHPで取り出すことができるようになりましたが、 そのデータを、どうやってaction script(クライアント側)に連携させるかで悩んでます。 phpとmysqlの連携の本は何冊かそろったのですが、 ACTION SCRIPTとphpの連携について書いてある本が見つからなくて、 詳しい人がいたら教えてください。 PHPからmysqlに接続して、テーブルを選んで、 echo $row["●●"]; という形で、インターネットエクスプローラーに、必要なデータを表示させるところまではできたのですが、 このデータをaction scriptに連携させるには、どうしたらいいでしょうか?

    • ベストアンサー
    • PHP
  • php mysqlで条件検索したいが学び方は

    http://www.asakusa-chintai.com/list.php?foot_station=-1&yachin_low=-1&yachin_hi=-1&menseki_low=-1&menseki_hi=-1&pict=1&search_start=1 このサイト(下に検索フォームがあります)のように、複数条件で検索すると画像付きで横4列くらいで結果が返ってくる、さらに20件ごとに改ページといったようなものを作りたいと考えています。 そこで質問なのですが、phpとmysqlを使うことでこのようなページ、またデータベースにデータを登録するようなシステムはできるでしょうか? phpとmysqlを勉強すればできるようになるのではと考え、phpの基礎の本は一冊読み、簡易ブログシステムを作った程度の(といってもサンプルプログラムを少しいじって動かした程度ですが)ことはしたのですが、これから何を勉強すればいいのかわからなくなりました。 特にphpやmysqlを勉強したいわけではなく、上記のようなページを作成することが目的なので、できればphpやmysqlを体系的に学ぶというよりは、上記のページを作成するために必要な技術だけ学びたいです。 これから何を学べばできるようになるでしょうか? それとも、これは相当に難しい事で、年単位で勉強しなければできないものなのでしょうか?

    • ベストアンサー
    • PHP
  • 独学でphp

    ポイント管理プログラムのようなものを作成したいと思っています。 php mysqlを独学で学びたいと思っているのですが、他にこれを覚えた方がよいなどアドバイスください。 コンピュータはほぼ初心者です。 理想は、シンプルで、高付加にも耐えることができるシステムが作りたい。そして、覚えるのが比較的簡単。 質問があいまいで申し訳ありませんが、些細なことでもよいのでアドバイスや、お勧めの本教えてください。 お願いします。 pearは役に立つのかなど。

    • 締切済み
    • PHP
  • PHP+MYSQLについて

    PHP+MYSQLについて 速効!図解プログラミング PHP+MYSQLと言うの本の中で紹介されています。PHPとMysqlで作る会員管理システムについてこの本を元にして構成を変更したく考えています。下記の内容を実現するにはどの様な変更するとうまくいくのでしょうか? 画面遷移を トップページ ⇒ 登録画面(全項目登録) ⇒ 確認画面 メール送信完了画面 メールhttp://~ ⇒ 登録完了 ⇒ ログイン を トップページ ⇒ 登録画面(メールのみの登録) ⇒ 確認画面 メール送信完了画面 メールhttp://~ ⇒ 本登録(全項目登録) ⇒ 登録録完了 ⇒ ログイン この本をお持ちの方、勉強された方どの様な作りにしたらよいと思いますか? ちなみにこの本のサンプルはhttp://book.mycom.co.jp/suport のSection72-81です。 皆様なにとぞお力をお貸しいただけます様によろしくお願いいたします。

    • 締切済み
    • PHP
  • MacOSX10.3でpearモジュールを使うには

    学習用にMacOSX10.3にもともと入っているapache,PHP,Perlを一通り使える状態に設定し、MySQLをインストールしました。MySQLも設定を一通り終えて、本を読み進めて行くと、pearモジュールを使ったサンプル制作の章に差し掛かるのですが、この本にはepar導入方法は詳しくのっておらず、つまずいてしまいました。もともとMacOSXにはpearが入っているそうですが、ネットで調べながらやってもよくわかりませんでした。とりあえず今の状況をわかる範囲で説明しますので、あとをどうすればよいか教えてください。よろしくお願いいたします。 ターミナルより which pear …これを実行すると /usr/bin/pear …と返ってきます。 cd /usr/bin …これでpearのあるであろうディレクトリへ移動 pear list …これを実行すると (no install package) …となります。 cd …とりあえずこれで最初にもどりました。 pear install PEAR …見よう見まねでこれを実行してみました。 なんかインストールされたっぽいです。 cdせずに pear list    …これを実行 (no install package) …やはりこうなります。 cd /usr/bin …再び移動 pear install PEAR …これを実行 pear list …一応実行してみる (no install package) …やっぱり といった具合です。 詳しい導入方法ご教授願います。

    • 締切済み
    • PHP
  • 画像のアップロードに関して

    お世話になっております。画像をブラウザ上からアップロードし、指定のディレクトリ(その都度mkdir関数によりディレクトリを生成)に保存するスクリプトを組んでおりますが、DBにファイル名(または保存先?)を登録するような内容を考えております。 そこでいくつか質問があり投函させて頂きます。 1・アップロードする際、クライアントのPC内にあるファイル名が日本語だった場合、そのままアップロードさせて問題が発生する事が考えられるか? 2・上記のように日本語である事を想定し、半角英数でリメイクするスクリプトを構築する場合、どのようなリメイクが適当で、どういったスクリプトを記述する事になるか? 3・アップロードさせる際、画像以外をアップロードしないよう規制をかけるにはどうしたら良いか? 4・ディレクトリに画像をアップロードさせる訳だが、後にブラウザ上にその画像を表示させるには、DBへ保存するのは、やはり<img src="…… といったコードを登録する事になるのか? の4点です。スキルが無くここ数日頭を悩ませながら、進んでは振り出しに戻るを繰り返しており、丸投げのつもりは一切無いのですが、ポイントをご指導いただければ幸いに思い、投函させて頂きました。 お手数お掛けいたしますが、ご教授のほど宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • PHP ユーザ登録申請、メール認証ログインサンプル

    「ユーザ登録申請すると、メール認証してログインするサンプル」を探しています。 ご存知の方は教えて下さい <探している内容> ・管理者以外のユーザーが、登録申請したら、メール送信して認証 ・ユーザ情報をデータベースへ保存 <条件> ・PEARを利用していない ・XOOPS以外 ・無料 ・「CakePHP」や「symfony」などのフレームワーク(プラグイン含む)を利用していても構いません。上記要件を満たすサンプルがあれば教えてください ・なるべくメール認証機能だけがいいのですが(コードを追いやすいと思うので)、ないようなら他に機能(CMSなど)がついているものでも構いません ・なるべく日本のものがいいのですが(日本語コメントがあるとコードを追いやすいと思うので)、ないようなら外国のものでも構いません ・コードそのものを見たいのですが、ないようなら、チュートリアル的なサイトなどの情報を知りたいです

    • 締切済み
    • PHP