2012-03-12 10 views
2

私は初心者ですから、PHPとMySQLデータベースで画像を扱うようになりました。ここに問題があります:データベースに接続した後、MySQLデータベースに格納された画像を表示できません

イメージはBLOBフィールドのデータベーステーブルに正常に保存されています。私はそれをファイル(new.jpg)に書き込み、画像を表示することができます。今ここにtwsiterがあります - 私はWebページ上の画像を表示するために作成したimagedisplay.phpファイルは、フォルダディレクトリからnew.jpgファイルを読むことができます。しかし、データベースに直接接続してデータベースから画像データを直接取得すると(コードにnew.jpgを含める必要がないように)、「画像にはエラーがあります.....」というエラーが表示されます「

画像をアップロードするために使用されるコードは

<?php 
require_once 'login.php'; //contains the classes for connecting to databases 
$dbh=new DB_Mysql;   //executing queries 
$func=new DB_Mysql_code_functions; 

session_start(); 
if(isset($_SESSION['username'])) 
{ 
    echo<<<_END 
    <form method="post" action="admin_social_activities.php" enctype="multipart/form-data"> 
    <table width="990"> 
    <tbody> 
    <tr><td>Select an image file to be uploaded:</td></tr> 
    <tr><td><input type="submit" value="UPLOAD" /></td></tr> 
    </tbody> 
    </table> 
    </form> 
_END; 

    if(isset($_FILES['imagefile']['tmp_name'])) 
    { 
     $imagefile=$_FILES['imagefile']['tmp_name']; 
     $image_size=$_FILES['imagefile']['size']; 
     $image_name=addslashes($_FILES['imagefile']['name']); 
     $image_data = addslashes(file_get_contents($imagefile)); 

     $image_array=getimagesize($imagefile); 
     $image_type=$image_array['mime']; 
     $image_height=$image_array[1]; 
     $image_width=$image_array[0]; 

     $maxfilesize=2000000; 

     if($maxfilesize<$image_size) 
     { 
      echo "Please upload a smaller image. The size of the image is too large."; 
     } 
     else 
     { 

      $query="INSERT INTO allery(image_name,image_type,image,image_size) VALUES ('".$image_name."','".$image_type."','".$image_data."','".$image_size."')"; 
      $stmt=$dbh->execute($query); 
      $lastimageid=mysql_insert_id(); 
      $query="select * from gallery where mage_id=".$lastimageid; 
      $stmt=$dbh->execute($query); 
      $row=$stmt->fetch_row(); 
      if(file_exists("new.jpg")) 
      unlink("new.jpg"); 
      $handle=fopen("new.jpg",'wb'); 
      fwrite($handle,$row[3]); 
      fclose($handle); 

      echo "<p>You uploaded this image</p><img src='imagedisplay.php'  height=".($image_height/2)." width=".($image_width/2).">"; 
     } 
    } 
} 

とimagedisplay.phpファイルの現在のコードは以下であり、それは細かい画像を表示:

<?php 
header("Content-type: image/jpeg"); 
$image=imagecreatefromjpeg("new.jpg"); 
imagejpeg($image); 
imagedestroy($image); 
?> 

それとして、画像を表示停止しますすぐに私はimagedisplay.phpに接続クエリを含める

<?php 
require_once 'login.php'; 
$dbh= new DB_Mysql(); 
$func=new DB_Mysql_code_functions; 

header("Content-type: image/jpeg"); 
$image=imagecreatefromjpeg("new.jpg"); 
imagejpeg($image); 
imagedestroy($image); 
?> 

私は日以来、この上で立ち往生メートル... ..


OKを助ける...ので、私は私のアプローチを変更してください...今、クエリ文字列にimage_idはを渡すIMとimagedisplay.phpイメージタグを含む: 何らかのフォーマット上の問題のため、ここにコードの先頭部分を書くことができませんのでご注意ください。 headセクションは、Dreamweaverで標準的にフォーマットされたhtmlセクションです。

<body> 
<div class="page shadow-round"> 


<div id="header"> 
<div id="logo"> 
<script type="text/javascript" src="../js/header.js"></script> 
</div> 
</div> 
<div id="menu"> 
<script type="text/javascript" src="../js/navmenu.js"></script> 
<script type="text/javascript"> 
</script> 
</div> 


<div class="content overflow" style="height:900px;"> 

<?php 
require_once 'login.php'; //contains the classes for connecting to databases 
$dbh=new DB_Mysql;   //executing queries 
$func=new DB_Mysql_code_functions; 

session_start(); 
if(isset($_SESSION['username'])) 
{ 
    echo<<<_END 
    <form method="post" action="admin_social_activities.php" enctype="multipart/form-data"> 
    <table width="990"> 
    <tbody> 
    <tr><td>Select an image file to be uploaded:</td></tr> 
    <tr><td><input type="submit" value="UPLOAD" /></td></tr> 
    </tbody> 
    </table> 
    </form> 
_END; 

    if(isset($_FILES['imagefile']['tmp_name'])) 
    { 
     $imagefile=$_FILES['imagefile']['tmp_name']; 
     $image_size=$_FILES['imagefile']['size']; 
     $image_name=addslashes($_FILES['imagefile']['name']); 
     $image_data = addslashes(file_get_contents($imagefile)); 

     $image_array=getimagesize($imagefile); 
     $image_type=$image_array['mime']; 
     $image_height=$image_array[1]; 
     $image_width=$image_array[0]; 

     $maxfilesize=2000000; 

     if($maxfilesize<$image_size) 
     { 
      echo "Please upload a smaller image. The size of the image is too large."; 
     } 
     else 
     { 

      $query="INSERT INTO gallery(image_name,image_type,image,image_size) VALUES ('".$image_name."','".$image_type."','".$image_data."','".$image_size."')"; 
      $stmt=$dbh->execute($query); 
      $lastimageid=mysql_insert_id(); 
     echo "<p>You uploaded this image</p>"; 
     echo "<img src='imagedisplay.php?imageid=".$lastimageid."' />"; 
     } 
    } 
} 
else 

echo "<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Your are <span class=\"red\"><b>not Authorized</b></span> to view this page. If you are the Admin, please login with your credentials again. <a href='login_page.php'>Click here to continue</a>"; 


?> 
</div> 
</body> 
</html> 

ここで問題は、コントロールが決してimagedisplay.phpに移動しないことです。 imagedisplay.phpを完全に参照することができません。

imagedisplay.phpのためのコードは以下の通りです:

<?php 
require_once 'login.php'; 
$dbh= new DB_Mysql(); 
$func=new DB_Mysql_code_functions; 
$id=$_GET['imageid']; 
$query="SELECT * FROM gallery where image_id=".$id; 

$stmt=$dbh->execute($query); 
$row=$stmt->fetch_row(); 
$imagedata=$row[3]; 
header("Content-type:image/jpeg"); 
echo $imagedata; 
?> 

私は引用符ですべての順列組み合わせを試してみましたが、コントロールはファイルに入ったかどうかを確認するためにecho文を試してみました....しかし、それはしていません。..私は理由を理解していません...助けてください...

+0

imagedisplay.phpの2番目の例は、phpタグがないことを除いて、異なっているようではありません。 – Leif

+0

最後のコードには、あなたが話している質問が含まれていないため、見つからないものがあります。 –

+0

'$ dbh =新しいDB_Mysql(); $ func = new DB_Mysql_code_functions; ' - ここでエラー処理はどのように機能しますか?スクリプトは、データベースへの接続が確立されているかどうかをどのように判断できますか? – VolkerK

答えて

1

あなたはあなたの質問( "allery"、 "mage_id")にいくつかの誤りがあります。あなたはどこにでもimagedisplay.phpであなたのコードにエラーがある場合は

$query="INSERT INTO allery(image_name,image_type,image,image_size) VALUES ('".$image_name."','".$image_type."','".$image_data."','".$image_size."')"; 
... 
$query="select * from gallery where mage_id=".$lastimageid; 

、彼らが出力されますし、それを破壊し、画像データに終わります。 imagejpeg()を削除してイメージヘッダを送信しない場合は、imagedisplay.phpの出力を確認してください。これにより、必要な情報が得られます。

+0

クイック返信のためのThnks .... – shweta

+0

コードは問題ありません。これはここにクエリを投稿するタイプミスです...ごめんなさい... – shweta

関連する問題