2016-05-13 66 views
1

存储在数据库中的所有其他信息都在网站上,而不是作为BLOB图像的图像。数据库保存图像,就像按下它一样会显示正在存储的图像。任何赞赏!未从数据库中收集图像

GetImage.php

<?php 
include "connection.php"; 

$ID = $_GET["ID"]; 

$SQLCommand = "SELECT * FROM products WHERE ID = '$ID'"; 
$Result = mysqli_query($con, $SQLCommand); 

$row = mysqli_fetch_assoc($Result); 

header("Content-type:" . $row["Name"]); 
echo $row["Image"]; 

?> 

shop.php

<?php 
include "connection.php"; 

$SQLCommand = "SELECT * FROM products"; 
$Result = mysqli_query($con, $SQLCommand); 

while($row = mysqli_fetch_assoc($Result)){ 
echo "<p id='p1'>" . $row["Name"] . 
    "<br></p><p id='p3'>£" . $row["Price"] . 
       "<br><br><img src=GetImage.php?ID=" . $row["ID"] . "   width=10%>" . 
     "<br><a href=productdetails.php?ID=" . $row["ID"] . ">Details</a></p>". 
     "<p id='p2'><a href=BasketAdd.php?ID=" . $row["ID"] . ">Add to  Basket</a><br><br>"; 
} 
?> 

InsertImageform

<html> 
<body> 
<form action="UploadFile.php" method="post" 

ENCTYPE = “多部分/格式数据”>

Name: <input type="text" name="name" id="name"><p> 
Description: <input type="text" name="description" id="description"><p> 
Price: <input type="text" name="price" id="price"><p> 
Protein: <input type="text" name="protein" id="protein"><p> 
Type: <input type="text" name="type" id="type"><p> 

Filename: <input type="file" name="file" id="file"><br> 
<input type="submit" name="submit" value="Submit"> 
</form> 
</body> 
</html> 
+0

** WARNING **:当使用'mysqli',你应该使用[参数查询](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)和['bind_param'](http://php.net/manual/en/mysqli-stmt.bind- param.php)将用户数据添加到您的查询中。 **不要**使用字符串插值或连接来完成此操作,因为您创建了严重的[SQL注入漏洞](http://bobby-tables.com/)。 **绝不**将'$ _POST'或'$ _GET'数据直接放入查询中,如果有人试图利用您的错误,这会非常有害。 – tadman

回答

0

相反,你可以使用,

<?php 
    include "connection.php"; 

    $SQLCommand = "SELECT * FROM products"; 
    $Result = mysqli_query($con, $SQLCommand); 

    while($row = mysqli_fetch_assoc($Result)){ 
    echo "<p id='p1'>" . $row["Name"] . 
     "<br></p><p id='p3'>£" . $row["Price"] . 
        "<br><br><img src=" . base64_encode($row['image']) . "   width=10%>" . 
      "<br><a href=productdetails.php?ID=" . $row["ID"] . ">Details</a></p>". 
      "<p id='p2'><a href=BasketAdd.php?ID=" . $row["ID"] . ">Add to  Basket</a><br><br>"; 
    } 
?> 

您应该使用base64_encode()函数读取BLOB图像。

+0

嗨@thewebmstr不幸的是,试图帮助 – user6107183

+0

是你的图像列blob格式不工作? – keziah

+0

是的,这是正确的 – user6107183

0

数据库中图像的问题通常与图像在数据库中的存储方式有关。

图像可以作为二进制存储,但是如果以base64存储,则问题较少。

我需要看到的是将图像存储在数据库中的代码。
给定文件输入与 “形象”

<input type="file" name="image"> 

随后的名称

if(is_uploaded_file($_FILES['image']['tmp_name']) || !($_FILES['image']['error'] !== UPLOAD_ERR_OK)){ 
    $img = base64_encode($_FILES['image']); 
    $sql = "INSERT INTO `images`(`image`) VALUES('$img')"; 
    ... 
} 

或者作为更新:

UPDATE `table` SET `image`='$img' WHERE ... 

在表中的字段形象将有一个“TEXT”的类型

,但仍然不够...

您需要知道尺寸和图像的类型。

if(is_uploaded_file($_FILES['image1']['tmp_name']) || !($_FILES['image1']['error'] !== UPLOAD_ERR_OK)){ 
    $save = false; 
    switch(strtolower($_FILES['image1']['type'])){ 
    case 'image/jpeg': 
    $image = @imagecreatefromjpeg($_FILES['image']['tmp_name']); 
    if ($image !== false){$save = true;break;} 
    case 'image/png': 
    $image = @imagecreatefrompng($_FILES['image']['tmp_name']); 
    if ($image !== false){$save = true;break;} 
    case 'image/gif': 
    $image = @imagecreatefromgif($_FILES['image']['tmp_name']); 
    if ($image !== false){$save = true;break;} 
    default: 
    $img = @getimagesize($_FILES['image']['tmp_name']); 
    switch(strtolower($img['mime'])){ 
    case 'image/jpeg': 
     $image = @imagecreatefromjpeg($_FILES['image']['tmp_name']); 
     $type = 'jpg'; 
     if ($image !== false){$save = true;break;} 
    case 'image/png': 
     $image = @imagecreatefrompng($_FILES['image']['tmp_name']); 
     $type = 'png'; 
     if ($image !== false){$save = true;break;} 
    case 'image/gif': 
     $image = @imagecreatefromgif($_FILES['image']['tmp_name']); 
     $type = 'gif'; 
     if ($image !== false){$save = true;break;} 
    default: 
     $filename = $_FILES['image']['name']; 
     $ext = substr($filename,-3); 
     switch(strtolower($ext)){ 
     case 'jpg': 
     $image = @imagecreatefromjpeg($_FILES['image']['tmp_name']); 
     if ($image !== false){$save = true;break;} 
     case 'gif': 
     $image = @imagecreatefromgif($_FILES['image']['tmp_name']); 
     if ($image !== false){$save = true;break;} 
     case 'png': 
     $image = @imagecreatefrompng($_FILES['image']['tmp_name']); 
     if ($image !== false){$save = true;break;} 
     default: 
     $image = @imagecreatefromjpeg($_FILES['image']['tmp_name']); 
     if ($image !== false){$save = true;break;} 
     $image = @imagecreatefrompng($_FILES['image']['tmp_name']); 
     if ($image !== false){$save = true;break;} 
     $image = @imagecreatefromgif($_FILES['image']['tmp_name']); 
     if ($image !== false){$save = true;break;} 
     } 
    } 
    } 
} 

获取宽度和高度

$width = imagesx($image); 
$height = imagesy($image); 
$base64 = base64_encode($image); 

把它放在一起为HTML <img>

$img = "<img width=\"$width \" height=\"$height\" src=\"data:image/$type;base64,$base64\" alt =\"image\"/>"; 
+0

我在第一篇文章中添加了插入图像表单 – user6107183

+0

我指的是如果有人上传不是图像的文件,那么该怎么办?该类型如何?您不想对用户施加限制,因为您没有知道如何处理多种图像类型吗?你无法打败这个例程,文件扩展名可能是错误的,HTTP MIME类型可能是错误的,但如果它是jpg,gif或png,这个例程就会正确。如果不是'$ save'将是错误的,你需要知道类型,所以当你使用base64时,你需要填写'data:image/$ type; base64,'' – Misunderstood