图像不通过PHP代码以html格式显示

时间:2014-04-07 14:53:15

标签: php mysql

file.php

 < ?php
 $hostname="localhost";
 $username="root";
 $password="tiger";
 /* @var $dbhandle type */
 $dbhandle = \mysqli_connect($hostname, $username, $password) 
   or die("Unable to connect to MySQL");
 $select= \mysqli_select_db($dbhandle,"sample")
   or mysqli_error($dbhandle);
 $filename=addslashes(file_get_contents($_FILE['photo']['tmp_name']));
 $image=basename( $_FILES['photo']['name']);
 $sql="insert into starterveg(img)values
 ('$image')";

 $result= \mysqli_query($dbhandle,$sql) or die(\mysqli_error($dbhandle));
$mysqli_close = \mysqli_close($dbhandle);
?>

getimage.php

 <?php
 $hostname="localhost";
 $username="root";
 $password="tiger";

 /* @var $dbhandle type */
 $dbhandle = \mysqli_connect($hostname, $username, $password) 
  or die("Unable to connect to MySQL");

 /* @var $select type */
 $select= \mysqli_select_db($dbhandle,"sample")
  or mysqli_error($dbhandle);
 /* @var $itemId type */
 $itemId= (\filter_input(\INPUT_GET,'itemId'));
 $sql="select img from starterveg where itemId='$itemId'";
 $res2=mysqli_query($dbhandle,$sql);
 $row= mysqli_fetch_assoc($res2);
 mysqli_close($dbhandle);
 header("Content-type: image/jpg");
 stripslashes($row['img']);
 echo $row['img'];

 <body>
 <img src="getimage.php?itemId=oepsv6812" alt="image" id="img1">
 </body>

我已将图像存储在数据库中,并希望以html格式检索。我面临的问题是,如果我通过php代码插入图像,图像不会以html格式显示。但是,如果我从phpmyadmin插入图像,我可以在html表单上显示。当我通过php代码插入图像时,它存储为BLOB 10B,如果我通过phpmyadmin插入它存储为BLOB -6.9KiB。这两者之间有任何区别。请解释。

2 个答案:

答案 0 :(得分:0)

我不是PHP的专家,但假设getimage.php?itemId = oepsv6812返回文件名正确可能您返回的文件名不在路径中。如果你使用的是linux,你应该记得linux中的文件名是区分大小写的。

答案 1 :(得分:0)

问题(除了sql注入...)是你没有存储文件,只是文件名:

$image=basename( $_FILES['photo']['name']);
$sql="insert into starterveg(img)values
 ('$image')";

然后你使用你的列就像它包含图像数据一样(它不包含字符串):

header("Content-type: image/jpg");
stripslashes($row['img']);
echo $row['img'];

将文件名存储在数据库而不是图像数据中是正确的做法,但是您需要将实际图像和路径存储到图像中,以便您可以读取并回显它。目前你还没有存储文件,所以当临时目录被清理时它就会消失。