-4

我已经将图像上传到数据库中,但是当我想显示它时,图像无法显示..我不知道为什么它无法显示..我的编码可能有问题..你能帮帮我吗?

上传.php

<?php

$id = $_POST['account'];
$code = $_POST['code'];
$price = $_POST['price'];

echo $file = $_FILES['image']['tmp_name'];
if (!isset($file))
  echo "Please select an image.";
else
{
 $image = addslashes (file_get_contents($_FILES['image']['tmp_name']));
 $image_name = addslashes ($_FILES['image']['name']);
 $image_size = getimagesize($_FILES['image']['tmp_name']);

 if($image_size==FALSE)
  echo "That's not an image.";
else
{
if (!$insert = mysql_query("INSERT INTO menu 
    VALUES('$code','$price','$image','$id')"))
echo "Problem uploading images.";
else
{
  $lastid = $code;
  echo "Image uploaded.<p />Your image:<p /><img src=get.php?id=$lastid>";
}

   }
 }
 ?>

获取.php

 <?php
 $con = mysql_connect("localhost","root","");
 if (!$con)
 {
 die('Could not connect: ' . mysql_error());
 }

 mysql_select_db("food", $con);


 $id = addslashes($_REQUEST['FoodId']);

 $image = mysql_query("SELECT * FROM menu WHERE FoodId=$id");
 $image = mysql_fetch_assoc($image);
 $image = $image['image'];

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

 echo $image;
 ?>
4

3 回答 3

2

1) 记住小鲍比桌;始终清理数据库中的输入。

2)不要使用旧的,它们不安全且折旧(请参见此处mysql_* functions的红框)。相反,看看使用 PDO 或 MySQLi,它们不需要很长时间来学习,而且,恕我直言,在各个方面都好得多,包括一旦你习惯了它们就易于使用。

3) 最好将图像保存在服务器上,并且只将图像 url 存储在数据库中。这是出于多种原因;更重要的是,如果您允许用户上传巨大的图像,当您拥有多个图像时,您的数据库将有数 Gb 大小并且读取速度非常慢,并且更难定期备份。

将文件上传到您的服务器:如何使用所需名称上传和保存文件

然后,您只需要将文件名存储在数据库中。然后,您可以从数据库中检索文件名,并在您想要显示该图像时将其添加到应用程序中的 img 标记中。

于 2012-09-19T13:37:15.090 回答
0

你为什么不关闭你的 img 元素?

最好让你 var 脱离字符串:

echo "Image uploaded.<p>Your image:</p><img src=\"get.php?id=$lastid\" />";
于 2012-09-19T13:29:02.510 回答
0

请通过手动查看您的数据库来确认图像已成功存储,并且实际上是可读的?,发布存储图像的内容。

仅供参考,通常最好将图像存储在服务器上的文件夹中,而不是存储在数据库中,然后将图像的路径存储在数据库中。

如果您想存储图像的路径,则可以使用以下方法:

<?php

$id = mysql_real_escape_string($_POST['account']);
$code = mysql_real_escape_string($_POST['code']);
$price = mysql_real_escape_string($_POST['price']);

$allowedExts = array("jpg", "jpeg", "gif", "png");
if(!isset($_FILES))
{
    die('No Image Uploaded - Please check form enctype="multipart/form-data".');
}
$fileinfo = pathinfo($_FILES['image']['name']);
$extension = $fileinfo['extension'];
if(!in_array($extension,$allowedExts))
{
    die('Invalid file type.');
}
$file   = '/uploadedimages/' . uniqid() .'.'. $extension;
if(!move_uploaded_file($_FILES['image']['tmp_name'], $_SERVER['DOCUMENT_ROOT'] . $file))
{
    die('Problem Storing Image in folder /uploadedimages/ - Please check folder exists and is writable.');
}

$insert = mysql_query("INSERT INTO menu VALUES('$code','$price','$file','$id')");
if(!$insert)
{
    die('Problem adding to db.');
}
/*
the following two echos demostrate two methods of showing the image, 
the first adds the variable by splitting the string and rejoining it,
the second nests the image inside the variable without the need to edit it.

The difference is the single and double quotes, single quotes take any content 
inside them as litteral, meaning 
    $string = "hello";
    $new_string = '$string Dave.';
    will print $string Dave. Not hello Dave.
Double quotes will accept variables and add the content they hold.
    $string = "hello";
    $new_string = "$string Dave.";
    will print hello Dave.
*/
echo 'Image Uploaded.<p>Your Image</p><img src="' . $file . '" />';

echo "Image Uploaded.<p>Your Image</p><img src=\"$file\" />";

该文件夹是 /uploadedimages/ 并且需要启用写入 (chmod777)

从另一个文件调用;您可以使用之前使用的查询随时从数据库调用图像;

$res = mysql_query("SELECT * FROM menu WHERE FoodId=$id");
$row = mysql_fetch_assoc($res);
$image = $row['image'];
?>
<img src="<?=$image?>" />

显然 $id 是您已经在 php 页面上定义的东西。

编辑:其他人对我的帖子所做的编辑是不必要的 - 使用带变量的单引号并没有错,它清楚地显示了您在哪里添加变量。如果您想展示如何使用双引号,您应该同时提供两个选项可用并解释差异。你的编辑很俗气,写得不好,在双引号后加了一个空格。

于 2012-09-19T13:31:13.177 回答