2017-03-09 4 views
0

以下は、長いblob形式のデータベースの画像を表示するために使用したコードです。Cant Display Image Mysqlから多くのソリューションがうまくいきませんでした

upload.php:

if(isset($_FILES['files'])){ 
    $servername = "localhost"; 
    $username = "root"; 
    $password = "123456"; 
    $dbname = "photost"; 
    $conn=mysqli_connect($servername, $username, $password, $dbname); 
    $user_id=$_POST['user_id']; 
    if (!$conn) { 
    die("Connection failed: " . mysqli_connect_error()); 
    } 
    $errors=""; 
    foreach($_FILES['files']['tmp_name'] as $key => $tmp_name){ 
     $file_name = $key.$_FILES['files']['name'][$key]; 
     $file_size =$_FILES['files']['size'][$key]; 
     $file_tmp =$_FILES['files']['tmp_name'][$key]; 
     $file_type=$_FILES['files']['type'][$key]; 
     $file_content = file_get_contents($file_tmp); 
     $maxsize = 10000000; 

    if($_FILES['files']['tmp_name'][$key]==UPLOAD_ERR_OK) { 
      if(is_uploaded_file($_FILES['files']['tmp_name'][$key])) { 
       if($_FILES['files']['tmp_name'][$key] < $maxsize) { 
        $finfo = finfo_open(FILEINFO_MIME_TYPE); 
        if(strpos(finfo_file($finfo, $_FILES['files']['tmp_name'][$key],"image"))==0) { 
         $imgData = addslashes(file_get_contents($_FILES['files']['tmp_name'][$key])); 
         $query="INSERT INTO `images`(`id`, `u_id`, `image`, `status`, `file_name`, `file_size`) VALUES (NULL,'$user_id','{$imgData}',0,'$file_name','$file_type');"; 
         if (mysqli_query($conn, $query)) { 
          echo "New record created successfully"; 
          } else { 
           echo "Error: <br>" . mysqli_error($conn); 
       } 
       else 
           echo "<p>Uploaded file is not an image.</p>"; 
           } 
           } 
          } 
          } 
          } 



<body> 
    <div style="width:100%;height:40%"> 
    </div> 
<div align=center> 
<form action="" method="POST" enctype="multipart/form-data"> 
    <table style="width:40%"> 
    <tr> 
     <th align="left">User Id:</th> 
     <th align="left"><input type='text' name='user_id'></th> 
    </tr> 
    <tr> 
     <th></th> 
     <th align="left"><input type="file" name="files[]" multiple/></th> 
    </tr> 
    <tr> 
     <th></th> 
     <th ><input type="submit"/></th> 
    </tr> 

    </table> 

    </form> 
</div> 
</body> 

test.phpを:

<body> 
<img src="getImage.php?id=1" /> 
</body> 

getImage.php:

$row = mysql_fetch_assoc($result); 

header("content-type: image/jpeg"); 

    echo $row['image']; 
    mysql_close($conn); 
:私は、このいずれかを試した

<?php 
$id = $_GET['id']; 
$servername = "localhost"; 
$username = "root"; 
$password = ""; 
$dbname = "photost"; 
$conn=mysqli_connect($servername, $username, $password, $dbname); 
if (!$conn) { 
    die("Connection failed: " . mysqli_connect_error()); 
} 
$query="SELECT * FROM `images` WHERE `id`=$id"; 
$result =mysqli_query($conn, $query); 
$row = mysqli_fetch_assoc($result); 

$image =$row['image']; 

/** check if the image is db */ 
if($image!=null) 
{ 
    $db_img = imagecreatefromstring($image); 
    Header("Content-type: image/jpeg"); 
    imagejpeg($db_img); 

} 
mysql_close($conn); 
?> 

私はphpMyAdminのからそれをダウンロードし、JPEG形式で保存することにより、画像を見ることができるこの

https://i.stack.imgur.com/RDkdM.png

もう一つのような出力を得る

イム。

+0

イメージをデータベースから取得する方法は、保存方法によって異なりますが、最初の場所があります。そのコードも表示してください – RiggsFolly

+0

ドライブにイメージを保存し、その場所をDBに保存する方がよいでしょう。また、SQLインジェクションも可能です。クエリをパラメータ化するか、少なくとも '$ id'をintとしてキャストしてください。 – chris85

+0

すべてのエラー報告を無効にし、カールを使用してイメージをダウンロードし、得られた結果と元のファイルとの16進/バイト比較を実行できますか? – Dimi

答えて

-1

mysqli_fetch_assoc関数は各行の配列を返しました。 は今

代わり
$image = $row[0]['image']; 

を試してみてください。

$image = $row['image']; 
+0

Didnt work ...... –

-1

正しい:

$image=$row['image']; 

表示部のためにする必要があります

<?php echo BASE_URL;?>/image_folder/<?php echo $image?> 

を保存するフォルダを作成しなければならないことを意味します画像 あなたのプロジェクトファイルにも。

これはあなたを助けることができます願っています。

+0

イメージをdbのlongblob形式で保存しています。データベースから画像を表示するのに役立ちます..... –

関連する問題