PHP:定义文件上载的名称

时间:2014-07-08 14:11:38

标签: php mysql file-upload path user-profile

我有一个代码可以在地图中存储个人资料图像"图像/个人资料"并将URL存储在数据库中。我想将上传的个人资料图片的名称定义为用户的$ ID。我怎么能这样做?

include("../../core/init.inc.php");

$target = "../images/profiles/";
$target = $target . basename($_FILES['photo']['name']);

$pic = $_FILES['photo']['name'];

if(move_uploaded_file($_FILES['photo']['tmp_name'], $target)) {
    echo "The file ". basename($_FILES['photo']['name']). " has been uploaded";
} else {
    echo "ERROR";
}

mysql_query("UPDATE users SET image_url='includes/images/profiles/$pic' WHERE username = '".mysql_real_escape_string($_SESSION['username'])."'");

现在当有人上传他的个人资料照片(让我们称之为pf1.png)时,它会将其保存为" pf1.png"。我希望它像" $ ID.png"一样保存。 (.png是随机扩展名)。我想为move_upload_file函数和更新' image_url'数据库列正确。

4 个答案:

答案 0 :(得分:1)

根据文档中的示例,您可以在move_uploaded_file()的目标位置提供文件名。如果失败,您可以在保存后简单地rename()文件。

答案 1 :(得分:1)

尝试更改

$target = $target . basename($_FILES['photo']['name']);

到:

$filename=$_FILES["file"]["tmp_name"];
$extension=end(explode(".", $filename));
$target = target . $_SESSION["ID"].".".$extension;  

旁注:您没有转义$pic这会使您的网站容易受到sql-injection的攻击

答案 2 :(得分:0)

我不知道您是如何保存用户的ID的,但为了方便起见,我们假设您已将ID存储在会话中。

然后只需更改$ target。

$target = $target . $_SESSION['ID'];

还要更改您的查询,如下所示:

$url = "includes/images/profiles/" . $_SESSION['ID'];

SET image_url="$url"

注意:我不知道为什么你在一个包含文件夹中有一个图像文件夹,但我猜你自己做了这个选择。

答案 3 :(得分:0)

您可以获取最后插入的ID,并将其作为图片/上传文件的名称

$qry = mysqli_query($dbconnection,"INSERT INTO statements here");
$last_id = mysqli_insert_id($dbconnection);

//$ext= you get the extension of the file uploaded

move_uploaded_file($tmpname,$target.$last_id.$ext);

现在如果你想在更新时完成它。

您始终可以获取要获取的数据的ID,并将其作为更新的基础。

离。

$id = $_GET['id'] || $id = $row['id']; //anything depends on how you want it to retrieve

然后你可以执行查询和move_uploaded_file函数

$qry = mysqli_query($dbconnection,"UPDATE tblname SET field='$anything' WHERE id = '$id'");
move_uploaded_file($tmpname,$target.$id.$ext);

当然$ tmpname将是您上传的文件的基础,$ tmpname将是您要移动到所需目录的文件