登録フォームを作成し、PHPにてMYSQLに情報を保存しようとしています。
テキストデータは問題なく保存できるのですが、画像データが保存できません。
いろいろ調べているのですが、テキストデータと画像データをいっぺんに保存する方法がわかりません。
なんとなくはどこらへんが問題なのかということはわかるのですが、具体的にどうすればいいかがわかりません。
アドバイスをご教示いただけないでしょうか。よろしくお願いします。
【mysqlテーブル】
create table entries (
id int not null auto_increment primary key,
name varchar(255),
address varchar(255),
image1 MEDIUMBLOB NOT NULL,
image1 MEDIUMBLOB NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
【touroku.php】
<?php
error_reporting(E_ALL & ~E_NOTICE);
if ($_SERVER['REQUEST_METHOD']=="POST") {
$name = $_POST['name'];
$email = $_POST['email'];
$image1 = $_POST['image1'];
$image2 = $_POST['image2'];
$error = array();
// エラー処理
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$error['email'] = 'メールアドレスが正しくありません';
}
if ($email == '') {
$error['email'] = 'メールアドレスが入力されていません';
}
// エラーがなかった場合
if (empty($error)) {
// DBにデータを入れる
mysql_connect("localhost", "ユーザー名", "パスワード") or die("can't connect to DB: ".mysql_error());
mysql_select_db("DB名") or die("can't select to DB: ".mysql_error());
$q = sprintf("insert into entries (name, email, image1, image2) values ('%s', '%s', '%s', '%s')", mysql_real_escape_string($name), mysql_real_escape_string($email), mysql_real_escape_string($image1), mysql_real_escape_string($image2));
mysql_query($q) or die("can't run query: ".mysql_error());
// 登録完了画面に飛ぶ
header("Location: http://localhost/.../thanks.html");
}
}
?>
<!DOCTYPE html>
<html lang="ja">
<meta charset="UTF-8">
<title>登録フォーム</title>
<head>
</head>
<body>
<form method="post" action="">
<p>名前:</p>
<input type="text" name="name" value="<?php echo htmlspecialchars($name); ?>">
<?php if ($error['name']) echo $error['name']; ?>
<p>メールアドレス</p>
<input type="text" name="email" value="<?php echo htmlspecialchars($email); ?>">
<?php if ($error['email']) echo $error['email']; ?>
<br>
<p>画像1:</p>
<input type="file" name="image1">
<p>画像2:</p>
<input type="file" name="image2">
<p><input type="submit" value="登録"></p>
</form>
</body>
</html>
No.5ベストアンサー
- 回答日時:
どうやって使うかが決まらないうちに(どうやって使うかが理解出来ていないのに)、データを格納する部分を作るというのはおかしな話です。
>mysqlに格納してあるデータを検索して表示する
ということですから、その検索結果でレコードを特定出来るキーを渡します。でないと画像データが特定できません。「画像を返すスクリプト」は渡されたキーで所定のレコードを読み出して、そこに格納されている画像データを(適切なhttpレスポンスヘッダとともに)ブラウザに返します。
当然ですがimg要素を組み立てるときには、すでにそのデータを読んでいる(なのでキーを渡せる)ということです。
#本来であれば、その時点でキャッシュさせるなどの手法を
#採りたいところですが、それは今後の課題ということで(汗
なお、デバッグ時にはとりあえずキーを(QueryStringで渡さずに)決め打ちしてもいいです。まずは画像を表示できることを確認するのが先ですから(これを先にやってみた方がいいと思います)。
この回答への補足
ご回答ありがとうございます。
表示したい画像を特定するキーは、mysqlに保存した時に割り振りしているidを使いたいと考えています。
そうすると、
<?php echo '<img src="get_image.php?..... の「?」の後に、割り振ってあるidを入れて画像を特定し、get_image.phpファイルにて画像を読み出すという理解なのですがいかがでしょうか?
No.4
- 回答日時:
えっと・・・
「ブラウザに画像を返す」というときには(ブラウザのアドレスバーにURLを直接入力する以外では)img要素のsrc属性として指定するしかありませんが、それは理解されていますか?
データベースから画像を返すような場合には、そのsrc属性に
<img src="gazou.php?id=1234" />
などとphpスクリプトを指定して、そのスクリプトがデータベースから画像データを読み込んで「画像データを(適切なhttpレスポンスヘッダとともに)返す」ことになります。
src属性で画像ファイルを指定したらwebサーバがそのファイルをブラウザに返しますが、そのときの動作をphpスクリプトで再現することになります。なのでwebサーバが(httpレスポンスヘッダなど)どう動いているのかがわかっていないといけません。このあたりをキチンと理解していないと保存しても意味がありませんよ(汗
この回答への補足
ご回答ありがとうございます。
調べているうちにいろいろと錯誤してしまっていました。
今回、mysqlに格納してあるデータを検索して表示する中の1つの項目が画像なのですが、<img src="....phpのあとの「id=~~」の部分をどう書けばいいのかわかりません。検索結果として画像を表示するので、検索の際渡したidをそのまま使うのだろうとは思っています。
度々申し訳ありませんが、検索結果として表示する際について、idについてもう少しヒント、アドバイスよろしくお願いします。
No.3
- 回答日時:
>表示の際、<?php echo $row['image1']; ?>としているのですが、
ブラウザに「画像データ」を返すのですから、先に
header('content-type: image/jpeg');
などのhttpレスポンスヘッダを送出しておかないといけません(mimeタイプはデータによります)。当然、当該スクリプトではhttpヘッダと画像データ以外のものをブラウザに返してはいけません。
この回答への補足
ご回答ありがとうございます。
ご指摘頂いた点修正加えて見たのですが、今度は何も表示されなくなりました。
調べていると<img src="◯◯.php" ... とし、別途phpファイルでローダーを作った上で読み込ませるといった方法もあるみたいなのですが、どちらが方法として良いということはあるのでしょうか?
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']) : "";
などとするだけだと思います。
この回答への補足
ご回答ありがとうございます。
ご指摘頂いたように修正してみたところ、とりあえずはきちんと動作(?)したようです。
きちんと保存されているか確認のため、phpを使って出力してみているのですが、ずらっと文字列(文字化けともなんとも言いがたい・・)が並んで画像として表示がされません。
表示の際、<?php echo $row['image1']; ?>としているのですが、これは単純に出力のためのコードが間違っているのか、それともそもそもきちんと保存されていないのか、どちらになるのでしょうか?
度々申し訳ありませんが、ご教示いただけないでしょうか。
No.1
- 回答日時:
画像ファイルを取得する際のお作法に誤りがありますよ。
$_FILESを利用しましょう。
さらにDB側はBLOB型なわけですから、ファイルパスなどではなく
バイナリデータを格納しなければなりません。
$_FILES['tmp_name']にサーバにアップロードされたファイルが
あるので、それを読み込んで書きこむ必要があります。
http://php.net/manual/ja/reserved.variables.file …
この回答への補足
ご回答ありがとうございます。
なるほど、そうですね。
調べてみると$_FILESに関するサイトがいっぱいでてきたのですが、少し引っかかる部分があります。
それは、画像に関するコードを書く場所なのですが、「DBに接続する」の後、「&q = sprintf.....」の前にそのまま書いてしまってもいいものなのでしょうか?
それとも、もっと別にコードを書く場所を設けるべきでしょうか?
アドバイスご教示よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA で、スペースを含むファイ...
-
$_SESSIONに渡した後はそのまま...
-
Flaskでサーバー立ち上げに関して
-
画像をDBに登録できない
-
PHPで入力フォームでデータを確...
-
PHP MySql 画像を取得
-
<input type="hidden" >で配列...
-
HTMLで前の画面に戻る時、入力...
-
PHPで受け取ったパラメータを別...
-
laravelを利用してコントロール...
-
phpやmysqlで作る簡易掲示板作...
-
phpの掲示板で新しい順に表...
-
複数 selectフォームから今回on...
-
複数のセレクトボックスを1つに...
-
PHPのmysqlに格納したデータの...
-
ラジオボタンをsessionで使いたい
-
フォームへの前回入力値をクリ...
-
PHPのエラーの解消法について教...
-
プログラムの複製(VB.net)
-
ウェブ上で選択した複数行の内...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA で、スペースを含むファイ...
-
phpで変数を使ってcopyできない
-
Flaskでサーバー立ち上げに関して
-
POSTの項目に追加
-
foreachがうまく動かない
-
PHP&MySQL fetchAll()でデータ...
-
PHPからHTMLへの変数の受け...
-
サブフォルダ内の全てのテキス...
-
ファイル名を変更してアップロ...
-
$_REQUEST とphpファイルでphp?...
-
openCVのトラックバーについて
-
php+mysqlでの重複チェックにつ...
-
phpでショッピングカート機能を...
-
アップロードしたファイルの絶...
-
PHP FTPサーバへの画像アップロ...
-
$_REQUESTの意味を教えて下さい
-
重複を防ぐ記述について教えて...
-
php ファイルアップロード サ...
-
PHP MySql 画像を取得
-
name属性が全角の場合・・・
おすすめ情報