[PR] この広告は3ヶ月以上更新がないため表示されています。
ホームページを更新後24時間以内に表示されなくなります。
ユーザに画像をアップロードしてもらう際、保存先はディスクかDBかの議論が
よく行われますが、DBに保存する具体的なコードがなかなか見つけられなかったのでメモ
create.sql
create table image( id int not null auto_increment, img_data mediumblob )
img_upload.php
<HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=SHIFT_JIS"> <TITLE>データベースへの画像の格納</TITLE> </HEAD> <P>ファイルのアップロード</P> <FORM method="POST" enctype="multipart/form-data" action="img_upload.php"> <INPUT type="hidden" name="MAX_FILE_SIZE" value="65536"> 画像のファイル名を入力してください(最大16MByte) <INPUT size="30" type="file" name="upfile"><BR> <BR> <INPUT type="submit" name="submit" value="送信"> <INPUT type="reset" name="reset" value="リセット"> </FORM> <?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("server_name", "user_id", "password"); if (!$con) { print("MySQLへの接続に失敗しました"); exit; } if (!mysql_select_db("db_name")) { print("データベースへの接続に失敗しました"); exit; } $sql = "INSERT INTO image(img_data) values('$imgdat')"; $result = mysql_query($sql); if (!$result) { print("SQLの実行に失敗しました<BR>"); print(mysql_errno().": ".mysql_error()."<BR>"); exit; } $sql = "select max(id) from image"; $result = mysql_query($sql); if (!$result) { print("SQLの実行に失敗しました<BR>"); print(mysql_errno().": ".mysql_error()."<BR>"); exit; } $row = mysql_fetch_row($result); print("登録ID:" . $row[0]); mysql_close($con); unlink($_FILES["upfile"]["tmp_name"]); } ?> </BODY> </HTML>
view.php
<?php $id = intval($_GET['id']); header("Content-Type: image/jpeg"); $con = mysql_connect("server_name", "user_id", "password"); if (!$con) { print("MySQLへの接続に失敗しました"); exit; } if (!mysql_select_db("db_name")) { print("データベースへの接続に失敗しました"); exit; } $sql = "select img_data from image where id = $id"; $result = mysql_query($sql); if (!$result) { print("SQLの実行に失敗しました<BR>"); print(mysql_errno().": ".mysql_error()."<BR>"); exit; } if (mysql_num_rows($result) == 0){ $sql = "select img_data from image where id = 1"; $result = mysql_query($sql); if (!$result) { print("SQLの実行に失敗しました<BR>"); print(mysql_errno().": ".mysql_error()."<BR>"); exit; } } $row = mysql_fetch_row($result); echo $row[0]; mysql_close($con); ?>
http://f41.aaa.livedoor.jp/~fujishin/img/view.php?id=2と、idで画像が取り出せます。
イメージタグに含んでもOK