2009-06-26 2 views
0

あなたの中には正しい方法ではないが、アプリケーションを終了するための締め切り期限があり、今のところ私は戻ることができず、ディレクトリ内の画像。ザッツは正しい方法でデータベースに画像をアップロードする

私はこれを入力することで画像をデータベースに挿入されていた問題をクリアしていることになりました

$filename = $security->secure($_FILES['imgschool']['name']); 
$tmpname = $security->secure($_FILES['imgschool']['tmp_name']); 
$imgsize = $security->secure($_FILES['imgschool']['size']); 
$imgtype = $security->secure($_FILES['imgschool']['type']); 
$school = $security->secure($_POST['school']); 


//begin upload 
if($imgsize > 0) { 
$handle = fopen($tmpname, "r"); 
$content = fread($handle, filesize($tmpname)); 
$content = addslashes($content); 

//code to add all this to database 
} 

変数$コンテンツは画像であり、そのすべての取得はにaddslashesである(、すべてのことは、データが有効であれば、いくつかのチェックでやっているクラスのセキュリティコールを気にいけません)。私はbase64と呼ばれるものを使って言及している人がいることを覚えていますが、それがどのように書き込まれたかをほとんど思い出すことはできません。

これはさておき、すべてのクエリとその他もろもろ から、これは私が午前問題がある

header("Content-length: ".$imgsize); 
header("Content-type: ".$imgtype); 
header("Content-Disposition: attachment; filename=".$imgname); 
print $row['img']; 

画像を呼び出している主要部分である私は、データベース

から画像を呼び出しています方法ですそれは画像の代わりに表示されます。 URLに設定され、正しいのparamsで画像を表示するページを開いたときに、この場合、私はこれだけ

http://localhost/admin/school-catalog.php?page=gallery&id=4

を参照してくださいので、URLだけで、表示されます。私は全体のセクションaddslashesを使用して

//save image to db 
if(isset($_POST['btnupload'])) { 

$filename = $security->secure($_FILES['imgschool']['name']); 
$tmpname = $security->secure($_FILES['imgschool']['tmp_name']); 
$imgsize = $security->secure($_FILES['imgschool']['size']); 
$imgtype = $security->secure($_FILES['imgschool']['type']); 
$school = $security->secure($_POST['school']); 


//begin upload 
if($imgsize > 0) { 
$handle = fopen($tmpname, "r"); 
$content = fread($handle, filesize($tmpname)); 
$content = base64_encode($content); 
} 

$save = mysql_query("insert into tbl_schoolgallery(id,hash,img,imgtype,imgsize) values(null,'$school','$content','$imgtype','$imgsize')") or die(mysql_error()); 
header("Location: school-catalog.php?page=school_gallery"); 

} 


//call image from db 
$query = mysql_query("select * from $tbl where id = '$id'") or die(mysql_error()); 
while($row = mysql_fetch_assoc($query)) { 

$imgtypeget = explode("/", $row['imgtype']); 

$imgname = "img.".$imgtypeget[1]; 
$imgtype = $row['imgtype']; 
$imgsize = $row['imgsize']; 

header("Content-length: ".$imgsize); 
header("Content-type: ".$imgtype); 
print base64_decode($row['img']); 

print $row['img']; 
} 
+0

print $ contentを使用してはいけませんか? –

+0

データベースから画像を呼び出すため、私は気にしません – SarmenHB

+0

コードの一部とデータサンプルが欠落していますが、img列に適切な値が含まれていることを確認してください。 –

答えて

7

は非常に間違っているコピーした画像を保存するために行わなど されているクエリを見てみたかったもののため


。列がTEXTフィールドであるかBLOBフィールドであるかによって、Base64またはmysql_real_escape_stringを使用する必要があります。

Base64を使用するのはそれほど難しくありません。そのように使うこともできます。 addslashesbase64_encodeに置き換え、base64_decodeで画像をエコーし​​ます。

は、そのことについては、全体のことを書くために少し簡単な方法があります:

// begin upload 
if ($imgsize > 0) 
{ 
    $content = file_get_content($tmpname); 
    $content = base64_encode($content); 
} 

そして出力にあなたが本当に唯一の列がBLOBの場合

header("Content-type: ".$imgtype); 
echo base64_decode($img); 

を行う必要があり、しかし、あなたは直接mysql_real_escape_stringを使用することができます。

// begin upload 
if ($imgsize > 0) 
{ 
    $content = file_get_content($tmpname); 
    $content = mysql_real_escape_string($content); 
} 

そして:

header("Content-type: ".$imgtype); 
echo $img; 

あなたの現在の症状から判断すると、あなたのイメージがデータベースからどのように保存され、呼び出されたかに関するバグもあると思いますが、コードの一部その部分を修正する手助けをする前に、データベースに挿入して読み取るようにクエリを作成してください。


あなたの現在のコードは大体良好です。いくつかの問題:

print base64_decode($row['img']); 

print $row['img']; 

おそらく2番目の行を取り除くことを意味します。また、printの代わりにechoを使用する必要があります。誰もがそれを使用して、それは時々slighty速くすることができ、かつprintは本当に値を返す以外の利点を持っていません。

echo base64_decode($row['img']); 

$security->secure()はサニタイズ機能のいくつかの並べ替えのように見えます。ただmysql_real_escape_string()を使用してください - あなたが使用するはずのものです。 $imgsizeを除く。あなたはそれが整数であることがわかっているので、それにintval()を使いたいかもしれません。また、ここで

$query = mysql_query("select * from $tbl where id = '$id'") or die(mysql_error()); 

あなたはテーブルその上で、いくつかの行に名前を付けます。私は$tbl == 'tbl_schoolgallery'と仮定しますが、一貫性のためには、両方の場所で$tblを使用するか、両方の場所でを使用する必要があります。

また、whileifに置き換えてください。コードが何度も繰り返すと問題が発生します。

+0

私はコードの塊を追加しました:あなたはそれを確認できますか?あなたの時間をありがとう。 – SarmenHB

+0

私はそれを確認しました。どういたしまして。 :) – Zarel

+0

私はこれがエラーがどこにあるのかを感じています:$ tmpname = $ security-> secure($ _ FILES ['imgschool'] ['tmp_name']); クラスがやっていることは、mysql_real_escape_stringとhtmlencodeの値を取り戻すことです。一時的な画像ファイルは、それを破壊するものを通過しています。面白いのは、第三者のデータベースビューアを使用していると私は明らかにdatabse内の画像を見ることができます。 – SarmenHB

関連する問題