2012-02-09 35 views
0

私は、アップロードした画像をPHPでMySQLにアップロードできない理由を調べるため、コードを最小限に絞りました。誰かが私のエラーを指摘できれば、私は最も感謝しています。アップロードされた画像をPHPでMySQLに表示できません

実行時に、ブラウザにエラーが含まれているためイメージを表示できないことが報告されます。

ただし、画像アップロード&は、この同じ環境で実行されている他のデータベースで正常に表示されます。

アップロード後にデータベースにblobが保存されていることを確認しました。

私は何かが分かりません。

アップロードフォーム..

<body> 
<form enctype="multipart/form-data" action="imagetestprocess.php" method="post"> 
<input type="file" name="image"> 
<input type="submit" value="Submit"> 
</form> 

フォームハンドラ..

<?php 
include("../mylibrary/login.php"); 

login(); 

$imagefile = file_get_contents($_FILES['image']['tmp_name']); 
$imagefile = mysql_real_escape_string($imagefile); 
$query="UPDATE pieces SET image_full='$imagefile' WHERE assetno='1'"; 
$result = mysql_query($query); 

?> 

画像表示部..

関数と呼ば
<?php 
include("../mylibrary/login.php"); 

login(); 
echo "<body>"; 
echo "before"; 
echo "<img src=\"showimage.php\" alt=\"showimage\">"; 
echo "after"; 

?> 

...

<?php 
include("../mylibrary/login.php"); 
login(); 
$query = "select * from pieces where assetno='1'"; 
$result=mysql_query($query); 
$row=mysql_fetch_array($result, MYSQL_ASSOC); 
$image=$row['image_full']; 
header("Content-type: image/jpeg"); 
echo $image; 
?> 

答えて

1

変化MEDIUMBLOB/BLOB

ユーザ代わり$imagefile = file_get_contents($_FILES['image']['tmp_name']);

の以下のような表示イメージ機能用画像におけるこの$image = chunk_split(base64_encode(file_get_contents("image.jpg"))); にimage_fullフィールドタイプ。

header("Content-type: image/jpeg"); 
echo base64_decode($image); 
+0

こんにちは、あなたの返信のおかげで。 image_fullフィールドはすでに中括弧です。 あなたはどういう意味ですか?$ imagefile = chunk_split(base64_encode(file_get_contents($ _ FILES ['image'] ['tmp_name']))); 違いはありませんが、私は恐れています。 – Paul

+0

midiumblobが良好です。エンコードはあなたのfile_get_contentをエンコードするので、ガベージの問題は発生しません。character.chunk_splitは文字列を小さな塊に分割して、大きな文字列のときにイメージの内容を読み取ることをお勧めします。 –

0

使用mysql_escape_stringかにaddslashesと上記の解決策は、あなたのために動作しない場合、それは

0

を動作するかどうかを確認するには、ブラウザのキャッシュをクリア。 データベース内のフィールドの長さを長くしてみてください。 まだ動作しない場合は、 画像フォーマットがRGBかCMYKかどうかを確認できます。 フォーマットはスクリーン上で見るためにRGBで表示されます。 ブラウザで同じ画像ファイルを開こうとすることができます。

+0

はい、Firefoxでソースファイルを開くことはできますが、問題はありません。イメージは約50Kです&私は中くらいのブロブに保存しています – Paul

+0

Ok、 Chek for if($ _FILES ["file"] ["error"]> 0){ echo "ファイルのアップロードで何らかのエラーが発生しました"; } でも、データベースに画像を保存するのは良い方法ではないと思います。 より良いのは、move_uploaded_file()を使用してサーバーにイメージを保存し、イメージパスのみをデータベースに保存することです。 – rajesh

0

私はあなたのデータベースエンコーディングと関係があると思います。一部のエンコーディングはバイナリデータをサポートしていません。

エンコーディングを変更できない場合は、保存する前にbase64エンコードして表示してください。唯一のものは、base64は3でサイズを増加させます。

関連する問題