みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

PHPでDBとディレクトリへの画像データ登録方法

初めて質問させていただきますPHP初心者です。
画像投稿画面を作り、DB(imageフィールド)と任意のディレクトリ(member_picture)へ画像を保存するページを考えてます。

下記が作ったソースになるのですが、
id、message、titleフィールドにはちゃんと投稿内容が入るのですが、
どうしてもimageだけがフィールドにもディレクトリにも入りません。
アドバイスいただけますでしょうか。

<?php
session_start();

if(!empty($_POST)) {
//画像エラーの確認
$fileName = $_FILES['image']['name'];
if(!empty($fileName)) {
$ext = substr($fileName, -3);
if($ext !='jpg') {
$error['image'] = 'type';
}
}

if(empty($error)) {
//画像をアップロードする
$image = date('YmdHis') . $_FILES['image']['name'];
move_uploaded_file($_FILES['image']['tmp_name'], '../member_picture/' . $image);

$_SESSION['join'] = $_POST;
$_SESSION['join']['image'] = $image;
header('Location: content_upload.php');
}

}

//記録する
if (!empty($_POST)) {
if ($_POST['title'] !='') {
$sql = sprintf('INSERT INTO post SET member_id=%d,
message="%s", title="%s", image="%s", created=NOW()',
mysql_real_escape_string($member['id']),
mysql_real_escape_string($_POST['message']),
mysql_real_escape_string($_POST['title']),
mysql_real_escape_string($_POST['image'])
);
mysql_query($sql) or die(mysql_error());

header('Location: content_upload.php');
}
}

?>

<!DOCTYPEうんぬん・・>
<html うんぬん・・>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" type="text/css" href="style.css" />
<title>画像投稿ページ</title>
</head>

<body><div id="wrap">
<div id="head"><h1>画像投稿ページ</h1></div>

<form action="" method="post" enctype="multipart/form-data">

<dl><dt>投稿画面</dt>
<dd>画像<br>
<input type="file" name="image" />
<?php if($error['image'] == 'type'): ?>
<p class="error">* 画像は「.jpg」の画像を指定してください</p>
<?php endif; ?>
<?php if(!empty($error)): ?>
<p class="error">* 恐れ入りますが、画像を改めて指定してください</p>
<?php endif; ?>
</dd>
</dl>
<div>
<p><input type="submit" value="投稿する" /></p>
</div>
</form>
</div>
</div>
</body>
</html>

以上になります。
どこを注意したらいいのかもわからず困ってます!
よろしくお願いいたします。

投稿日時 - 2011-03-05 23:08:12

QNo.6571376

すぐに回答ほしいです

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

ゴメン、ソースは熟読してねーです。
でも見たトコ、受け取ったIMAGEファイルをそのままDBに突っ込んでいるように見受けられます。

DBのフィールドに入れる値は基本的にASCII値ですから、画像(IMAGE)のようなバイナリ値を入れると期待通り動いてくれないとです。
ならば話は簡単、DBに入れる前にバイナリ値をASCII値にして格納し、取り出した時はASCII値をバイナリ値に変換してあげれば良いのです。

そこで登場するのがPHPの関数、base64_encodeとbase64_decode。
DBに格納する時は base64_encode( $_POST['image'] ) でASCII値に変換したものを格納して、
取り出す時は base64_decode( $row['image'] ) でバイナリ値に戻してあげましょう。

DBの種類によっては、バイナリ値を直接叩き込めるBLOB型を使う方法もあるんですが…申し訳ないけど此方に関しては当方あまり知識を持ち合わせていないので調べてみてくださいませ。

投稿日時 - 2011-03-06 19:57:49

お礼

有難うございます。

base64_encode、頭の片隅にあったはずが忘れてました。
ディレクトリのほうは場所の問題だったので解決です。

どうもありがとうございました!!

投稿日時 - 2011-03-07 23:39:17

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問