使用PHP存储图像

时间:2012-04-11 05:08:28

标签: php mysql

我想让用户上传图片。该文件被重命名(通过将time()添加到当前名称),然后移动到我的Images /文件夹。然后我在我的html / php代码中引用上传到数据库表中的名称。由于表中的名称与实际文件名不同,因此不会显示图像。如果两个用户上传了具有相同名称的文件,则需要更改映像名称。如何将time()名称更改应用于表中的文件名和实际文件名,以便显示图像。这是我的代码:

if (!empty($_FILES['picture'])) 
    {
    $pic= $_FILES['picture']['name'];
    $target= GW_UPLOADPATH . time() . $pic;
        if (move_uploaded_file($_FILES['picture']['tmp_name'], $target))
            {
            $query= "INSERT INTO posts (user_id, story, picture) VALUES     
('$user_id', '$story', '$pic')";
            mysqli_query($connect, $query);
            header( 'Location: profile.php' );
            }
    }

表中的图片名称只是ball.jpg,实际文件可能是18292018ball.jpg。

9 个答案:

答案 0 :(得分:1)

试试这个

$query= "INSERT INTO posts (user_id, story, picture)
         VALUES ('$user_id', '$story', '$target')";

答案 1 :(得分:1)

你不应该在你的MySql查询中使用'$ target'而不是'$ pic'吗?

$query= "INSERT INTO posts (user_id, story, picture) VALUES ('$user_id', '$story', '$target')";

答案 2 :(得分:1)

注意:如果您要添加time()作为前缀,那么两张图片将永远不会相同

当您更改文件名时,为什么不将该新名称存储在db

$changed_name = time().$pic;

$query= "INSERT INTO posts (user_id, story, picture) VALUES     
($user_id, '".$story."', '".$changed_name ."')";

更改文件名的提示

  • 首先取出扩展名并命名
  • 通过单个空格删除多个空格
  • 然后用_
  • 替换空格
  • 转换图片名称的大小写(我更喜欢小写)
  • 然后添加带图像名称的时间()
  • 最后添加该扩展并存储到图像文件夹

答案 3 :(得分:0)

无需每次都存储上传路径,除非在不同的时间点可能会有所不同。

$name = time() . $pic;
$target= GW_UPLOADPATH .$name;

$query= "INSERT INTO posts (user_id, story, picture) VALUES
('$user_id', '$story', '$name')";

答案 4 :(得分:0)

确切地说没有任何欺骗行为:

  1. 服务器获取图像(用户以某种方式上传图像)
  2. 服务器为图像生成唯一ID
  3. 服务器使用该id在数据库(在唯一字段上)进行写入
    • 成功将文件移动到磁盘上的适当位置
    • 在第二步生成不同ID时失败重启

答案 5 :(得分:0)

您在数据库中存储的文件名与您保存的文件名不同。如果你只想使用文件名,在将文件附加到路径之前将文件存储在变量中,即代替

$target= GW_UPLOADPATH . time() . $pic;

$fileName = time() . $pic;
$target = GW_UPLOADPATH . $fileName;

并在SQL查询中使用$ fileName代替$ pic:

    $query= "INSERT INTO posts (user_id, story, picture) VALUES ('$user_id', '$story', '$fileName')";

答案 6 :(得分:0)

如果所有路径(例如图像/文件夹)相同,则可以使用:

if (!empty($_FILES['picture'])) {
    $pic= time() . $_FILES['picture']['name'];
    $target= GW_UPLOADPATH . $pic;

        if (move_uploaded_file($_FILES['picture']['tmp_name'], $target)) {
            $query= "INSERT INTO posts (user_id, story, picture) VALUES ('$user_id', '$story', '$pic')";
            mysqli_query($connect, $query);
            header( 'Location: profile.php' );
        }
}

答案 7 :(得分:0)

试试这个:

if (!empty($_FILES['picture'])) 
{
$pic= $_FILES['picture']['name'];
$picname = time() . $pic;
$target= GW_UPLOADPATH . $picname;
    if (move_uploaded_file($_FILES['picture']['tmp_name'], $target))
        {
        $query= "INSERT INTO posts (user_id, story, picture) VALUES('$user_id', '$story', '$picname')";
        mysqli_query($connect, $query);
        header( 'Location: profile.php' );
        }
}

$ picname将包含时间+图片名称。如果多个用户同时上传,它将是相同的。

答案 8 :(得分:0)

使用此:

$query= "INSERT INTO posts (user_id, story, picture) VALUES ('$user_id', '$story', '$target')";