dbにあるバイナリデータを画像として表示したいのですが。。 - PHPプロ!Q&A掲示板
2482
- 0P
- 0P
dbにあるバイナリデータを画像として表示したいのですが。。
質問日時 / 2010年1月25日 22:53 回答数 / 2件
Questioner: xxxamorixxx
Tweet
php初心者です。かなり調べ倒したのですが分からないので質問させていただきます。
最初に自身が行いたい事は以下の2点です。
1.ローカルにある文字データや画像をdbにアップロード
2.web上で文字、画像を確認
かなりの時間粘ってローカルにあるデータをアップロードすることが出来ました。
そして文字情報だけはweb上で確認することはできたのですが画像がバイナリデータという形式に変換?
されているので画像に戻したいのですがイマイチ上手いやり方が分かりません。
ソースを書くのでご教授願いますでしょうか。
流としては
add_form.htmlという投稿画面からデータをlibrary_add.phpに送信します。
library_search.phpで確認出来るように作っています。
【add_form.html】
<form action="library_add.php" method="post" enctype="multipart/form-data">
<table border="1">
<tr>
<td>商品コード</td>
<td><input type="text" name="itemNumber"></td>
</tr>
<tr>
<td>ブランド</td>
<td><input type="text" name="brand"></td>
</tr>
<tr>
<td>区分</td>
<td><input type="text" name="division"></td>
</tr>
<tr>
<td>商品説明</td>
<td><input type="text" name="explanation"></td>
</tr>
<tr>
<td>値段</td>
<td><input type="text" name="price"></td>
</tr>
<tr>
<td>URL</td>
<td><input type="text" name="url"></td>
</tr>
<tr>
<tr>
<td>画像</td>
<td><input type="file" size="30" value="参照" name="img"></td>
</tr>
<tr>
<td colspan="2" align="center">
<INPUT type="submit" name="submit" value="送信">
<INPUT type="reset" name="reset" value="リセット"></td>
</tr>
</table>
</form>
【library_add.php】
$itemNumber = $_POST['itemNumber'];
$brand = $_POST['brand'];
$division = $_POST['division'];
$explanation = $_POST['explanation'];
$price = $_POST['price'];
$url = $_POST['url'];
$img = $_POST['img'];
$host ="localhost";
$user ="root";
$pass ="";
$database ="test";
if (!$conn = mysql_connect($host, $user, $pass)){
die("MySQLエラー");
}
mysql_select_db($database,$conn);
if ($_POST["submit"]!="")//
{
if ($_FILES["img"]["tmp_name"]=="none")//ファイルの名前が確認出来ない場合はエラー文章を
{
print("ファイルのアップロードができませんでした。<BR>\n");
exit;
}
$fp = fopen($_FILES["img"]["tmp_name"], "rb");
if(!$fp)
{
print("アップロードしたファイルを開けませんでした");
exit;
}
$img = fread($fp, filesize($_FILES["img"]["tmp_name"]));
fclose($fp);
$file_path = ($_FILES["img"]["tmp_name"]);
$image = ImageCreateFromJPEG($file_path);
$width = ImageSX($image);
$height = ImageSY($image);
print("縦幅:{$height}<BR>\n");
print("横幅:{$width}<BR>\n");
print("ファイルサイズ:{$_FILES["img"]["size"]}<BR>\n");
$len = strlen($img);
print("データ長 :{$len}<BR>");
$img = addslashes($img);
$sql = "INSERT INTO test(bitemNumber,bbrand,bdivision,bexplanation, bprice, burl, bimg)
VALUES('$itemNumber','$brand','$division','$explanation','$price','$url','$img')";
mysql_query($sql , $conn)
or die("登録できませんでした");
print("登録しました。<a href=\"library_search.php\">library_search.php</a>で確認してください。");
}
【library_search.php】
<?php
$host ="localhost";
$user ="root";
$pass ="";
$database ="test";
if (!$conn = mysql_connect($host, $user,$pass)){
die("データベース接続エラー.<br />");
}
mysql_select_db($database , $conn);
$condition = "";
if(isset($_POST["explanation"]) && ($_POST["explanation"] != "")){
$explanation = mysql_escape_string( $_POST["explanation"]);
$explanation = str_replace("%", "\%", $explanation);
$condition = "WHERE bexplanation LIKE \"%".$explanation."%\"";
}
if(isset($_POST["price"]) && ($_POST["price"] != "")){
$price = mysql_escape_string($_POST["price"]);
$price = str_replace("%", "\%", $price);
if ($condition == ""){
$condition = "WHERE bprice LIKE \"%".$price."%\"";
} else{
$condition .= "AND bprice LIKE \"%".$price."%\"";
}
}
$sql = "SELECT * FROM shop ".$condition."ORDER BY bid LIMIT 50";
$res = mysql_query($sql, $conn);
/* データ取得
$users = mysql_fetch_array( $res );
echo($users);
exit;*/
print("<table border=\"1\">");
print("<tr><td>商品コード</td><td>ブランド</td><td>区分</td><td>商品説明</td><td>値段</td><td>URL</td><td>画像</td><td>更新</td><td>編集</td><td>削除</td></tr>");
while($row = mysql_fetch_array($res)) {
print("<tr>");
print("<td>".$row["bitemNumber"]."</td>");
print("<td>".$row["bbrand"]."</td>");
print("<td>".$row["bdivision"]."</td>");
print("<td>".$row["bexplanation"]."</td>");
print("<td>".$row["bprice"]."</td>");
print("<td>".$row["burl"]."</td>");
print("<img src= {$row_rs1['bimg'] } >");
print("<td>".$row["bimg"]."</td>");
print("<td><a href= 'add_form.html'>追加</a></td>");
print("<td><a href= \"library_editform.php?bid=".$row["bid"]."\">編集</a></td>");
print("<td><a href= \"library_delete.php?bid=".$row["bid"]."\">削除</a></td>");
print("</tr>");
}
print("</table>");
mysql_free_result($res);
?>
とても長くなってしまって申し訳ありません。
ソースをどこまで書けば分かりやすいのか分からなかったので全て記載させていただきました。
慣れている方が見ればとても雑なソースだとは思うのですが、
サラッと拝見していただいてヒントだけ与えていただけるのも助かりますので、
よろしくお願いします!
この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。





ページのトップへ


kende様のご指摘通り、三項演算子を使用する際には、コードの複雑度などを考慮する必要がありますね。書きやすさと共に可読性も追求したいところですね。