上载到数据库时,图像不会显示,文件名也会更改

时间:2015-03-20 08:37:29

标签: php

我无法在查看时显示/显示图片,尽管这些文件已存储在数据库中(表格'菜单')http://i.imgur.com/wo1w90H.png。此外,当我一次上传图像时,它们的文件名会自动更改。我不知道这是怎么发生以及为什么会发生这种情况。我使用数组上传多个图像。

if (isset($_POST["Submit"])) {
    --some code here--

    if (isset($_POST["id_list"])) {
        // if id list available
        foreach($_POST["id_list"] AS $id) {
            --some code here--

            /* Handle file upload */
            if ($_FILES['upload']['error'][$id] == 'UPLOAD_ERR_OK') {

                $path = "images/newmenu/";
                $path_parts = pathinfo($_FILES["upload"]["name"][$id]);
                $extension = $path_parts['extension'];
                $picture = md5(uniqid()) . "." . $extension;

                if (move_uploaded_file($_FILES['upload']['tmp_name'][$id], $path . "/" . $picture)) {
                    $update = " UPDATE menu
                                SET   MenuPicture='$picture'
                                WHERE MenuID=$id";

                    $mysqli->query($update) or die(mysqli_error($mysqli));
                }
            } 
        }
    }
}
}

以下是表单,是的,它包括enctype="multipart/form-data"

<input type="file" multiple name="upload[' . $id . ']"  value="' . $record["MenuPicture"] . '">

2 个答案:

答案 0 :(得分:0)

文件名更改,因为您以这种方式生成

$picture = md5(uniqid()) . "." . $extension;

uniqid()基于当前时间和散列,它会导致文件名每次都改变

答案 1 :(得分:0)

当我一次上传图片时,他们的文件名会自动更改

原因是:

$picture = md5(uniqid()) . "." . $extension;
// And later
move_uploaded_file($_FILES['upload']['tmp_name'][$id], $path . "/" . $picture)

基本上,您将上传的文件移动到图像文件的新文件名,该文件使用uniqid()生成并使用md5()进行哈希处理,最后附加文件扩展名。

我无法在观看时显示/显示

你是如何尝试显示图片的?是来自网络浏览器,还是直接进入目录并从那里打开?你得到了什么错误,如果有的话?

实际上,您是否曾尝试进入该目录并查看该文件是否在images/newmenu/目录中创建?

此外,对于目标上载目录,您可能希望将其附加$_SERVER['DOCUMENT_ROOT'],以便目标目录不依赖于脚本所在的位置,但它始终基于根目录。

顺便说一下,您可能已经知道,但uploading multiple files

上的PHP手册页中有一个条目