0

我想让用户上传图片。该文件被重新命名(通过将 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。

4

9 回答 9

1

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

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

$changed_name = time().$pic;

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

更改文件名的提示

  • 首先取出扩展名和名称
  • 通过单个空格删除多个空格
  • 然后用_
  • 转换图像名称的大小写(我更喜欢小写)
  • 然后添加带有图像名称的 time()
  • 最后添加该扩展名并存储到图像文件夹中
于 2012-04-11T05:19:25.053 回答
1

尝试这个

$query= "INSERT INTO posts (user_id, story, picture)
         VALUES ('$user_id', '$story', '$target')";
于 2012-04-11T05:11:23.773 回答
1

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

$query= "INSERT INTO posts (user_id, story, picture) VALUES ('$user_id', '$story', '$target')";
于 2012-04-11T05:12:28.470 回答
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' );
        }
}
于 2012-04-11T05:20:05.163 回答
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 将包含时间+图片名称。如果多个用户同时上传,则相同。

于 2012-04-11T05:21:24.203 回答
0

用这个 :

$query= "INSERT INTO posts (user_id, story, picture) VALUES ('$user_id', '$story', '$target')";
于 2012-04-11T05:47:28.933 回答
0

不需要每次都存储上传路径,除非它在不同的时间点可能不同。

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

$query= "INSERT INTO posts (user_id, story, picture) VALUES
('$user_id', '$story', '$name')";
于 2012-04-11T05:13:54.647 回答
0

为了完全确定没有任何欺骗:

  1. 服务器获取图像(用户以某种方式上传图像)
  2. 服务器为图像生成唯一 ID
  3. 服务器使用该 ID 写入数据库(在唯一字段上)
    • 成功后将文件移动到磁盘上的正确位置
    • 在第二步失败重新启动时生成不同的 ID
于 2012-04-11T05:15:01.367 回答
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')";
于 2012-04-11T05:15:15.020 回答