从mysql数据库预览中检索时破坏了

时间:2014-04-01 14:31:31

标签: php mysql image upload

我是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();                 
}
?>

1 个答案:

答案 0 :(得分:0)

  1. $ location $ caption 上使用mysql_real_escape_string()!!!
  2. 请注意,如果您上传的是名称相同的其他照片 已存在于您的数据库中,您将覆盖旧的数据库!
  3. 使用pdo_mysql或mysqli
  4. 检查 move_uploaded_file()
  5. 的返回值

    <强>更新

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

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

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

    您可能还需要在标题的下一行使用 htmlentities()

    无论如何,我上面的笔记仍然很重要,我建议你这样做。