【问题标题】:When retrieving from mysql database preview broken从mysql数据库中检索时预览损坏
【发布时间】:2014-04-01 14:31:30
【问题描述】:

我是 php 和 mysql 的新手,完全被困在这里。

我想在我的网页上上传图片,在图片库中显示上传的图片。

代码成功将图像存储在数据库中,但在图库中显示图像时不起作用。相反,它只是显示一个损坏的缩略图。

请帮助我。我在这方面工作太久了。

这里是index.php

<form action="addexec.php" method="post" enctype="multipart/form-data" name="addroom">
Select Image: <br />
<input type="file" name="image" class="ed"><br />
Caption<br />
<input name="caption" type="text" class="ed" id="brnu" />
<br />
<input type="submit" name="Submit" value="Upload" id="button1" />
</form>
<br />

// Photo Archive
<br />
<br />
<?php
include('config.php');
$result = mysql_query("SELECT * FROM photos");
while($row = mysql_fetch_array($result))
{
echo '<div id="imagelist">';
echo '<p><img src="'.$row['location'].'"></p>';
echo '<p id="caption">'.$row['caption'].' </p>';
echo '</div>';
}
?>

这是 addexec.php

<?php
include('config.php');
if (!isset($_FILES['image']['tmp_name'])) {
echo "";
}else{
$file=$_FILES['image']['tmp_name'];
$image= addslashes(file_get_contents($_FILES['image']['tmp_name']));
$image_name= addslashes($_FILES['image']['name']);

        move_uploaded_file($_FILES["image"]["tmp_name"],"photos/" .    
  $_FILES["image"]["name"]);

        $location="photos/" . $_FILES["image"]["name"];
        $caption=$_POST['caption'];

        $save=mysql_query("INSERT INTO photos (location, caption) VALUES 
  ('$location','$caption')");
        header("location: index.php");
        exit();                 
}
?>

【问题讨论】:

  • 您应该真正转义您放入数据库中的数据 - 这很可能是问题所在。
  • 您的代码签出。从我的服务器的根目录运行您的代码,并将文件上传到照片子文件夹,正确上传,然后正确显示图像。检查你的路径。
  • 如果您尝试从另一个子文件夹运行您的代码,那么它将失败。
  • 不要使用 $_FILES["image"]["name"] 作为文件的实际名称。尽管我们明智的人使用操作系统可以理解的文件名,但用户并不总是这样做。相反,生成一个与用户相关的文件名以及以后识别所有者的任何其他有用的文件名。在屏幕上显示图像时使用提供的文件名作为标题

标签: php mysql image upload


【解决方案1】:
  1. $location$caption 上都使用 mysql_real_escape_string() !!!
  2. 请记住,如果您上传的图片名称为 已经存在于您的数据库中,您将覆盖旧的!
  3. 使用 pdo_mysql 或 mysqli
  4. 检查move_uploaded_file()的返回值

更新

我已经在我的网站上运行了您的代码。我测试的第一个文件名中有 %20,但它失败了。

解决方案就像在 index.php 中的位置周围添加 urlencode() 一样简单,因此该行如下所示:

echo '<p><img src="'.urlencode($row['location']).'"></p>';

您可能还需要在下一行使用 htmlentities()caption

无论如何,我上面的笔记仍然很重要,我建议遵循这些。

【讨论】:

  • 这并没有解决真正的问题。数据已成功输入 DB。
  • @Fred-ii- - 我们仍然不知道 - $location 可能有一个特殊字符,如空格或“+”等...
  • 你可能是对的。我会自己测试OP的代码看看。
  • OP 的代码检查出来了,我什么都没做。至于空格和特殊字符,我对此表示怀疑。我在标题中输入了#1$*x123,效果很好。
猜你喜欢
  • 2015-06-09
  • 1970-01-01
  • 2014-03-17
  • 2015-07-01
  • 2011-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多