用PHP存储图像

用PHP存储图像,php,mysql,Php,Mysql,我想让用户上传图片。文件重新命名(通过将time()添加到当前名称),然后移动到“我的图像/文件夹”。然后在html/php代码中引用上传到数据库表中的名称。图像不会显示,因为表中的名称与实际文件名不同。图像名称需要更改,以防两个用户上载具有相同名称的文件。如何将time()名称更改应用于表中的文件名和实际文件名,以便显示图像。这是我的密码: if (!empty($_FILES['picture'])) { $pic= $_FILES['picture']['name'];

我想让用户上传图片。文件重新命名(通过将time()添加到当前名称),然后移动到“我的图像/文件夹”。然后在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。

试试这个

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

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

在MySql查询中不应该使用“$target”而不是“$pic”吗

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

在MySql查询中不应该使用“$target”而不是“$pic”吗

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

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

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

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

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

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

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

为了确保没有任何重复:

  • 服务器获取图像(用户以某种方式上载图像)
  • 服务器为映像生成唯一的ID
  • 服务器使用该id对数据库(在唯一字段上)进行写入
    • 成功后,将文件移动到磁盘上的正确位置
    • 失败时,在第二步重新启动,生成不同的ID

  • 为了确保没有任何重复:

  • 服务器获取图像(用户以某种方式上载图像)
  • 服务器为映像生成唯一的ID
  • 服务器使用该id对数据库(在唯一字段上)进行写入
    • 成功后,将文件移动到磁盘上的正确位置
    • 失败时,在第二步重新启动,生成不同的ID

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

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

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

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

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

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

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

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

    注意:如果添加
    time()
    作为前缀,则两个图像的前缀将不同

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

    $changed_name = time().$pic;
    
    $query= "INSERT INTO posts (user_id, story, picture) VALUES     
    ($user_id, '".$story."', '".$changed_name ."')";
    
    更改文件名的提示
    • 首先取出扩展名和名称
    • 按单个空格删除多个空格
    • 然后将空格替换为
    • 转换图像名称的大小写(我更喜欢小写)
    • 然后添加带有图像名称的time()
    • 最后添加该扩展并存储到图像文件夹中

    注意:如果要添加
    time()
    作为前缀,则两个图像的前缀将不同

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

    $changed_name = time().$pic;
    
    $query= "INSERT INTO posts (user_id, story, picture) VALUES     
    ($user_id, '".$story."', '".$changed_name ."')";
    
    更改文件名的提示
    • 首先取出扩展名和名称
    • 按单个空格删除多个空格
    • 然后将空格替换为
    • 转换图像名称的大小写(我更喜欢小写)
    • 然后添加带有图像名称的time()
    • 最后添加该扩展并存储到图像文件夹中

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

    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' );
            }
    }
    

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

    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' );
            }
    }
    
    试试这个:

    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将包含时间+图片名称。如果同时有多个用户上传,情况也会一样。

    试试以下方法:

    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将包含时间+图片名称。如果同时有多个用户上传,则情况相同。

    使用以下方法:

    $query= "INSERT INTO posts (user_id, story, picture) VALUES ('$user_id', '$story', '$target')";
    
    使用以下命令:

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

    如果将
    time()
    添加为前缀,则两个图像的时间永远不会相同如果将
    time()
    添加为前缀,则两个图像的时间永远不会相同这将不起作用,因为对time()函数的第二次调用将具有不同的值。对time()的两次调用的时间将不同。这不起作用,因为对time()函数的第二次调用将具有不同的值。对time()的两次调用的时间将不同。