我有一个代码可以在地图中存储个人资料图像"图像/个人资料"并将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'数据库列正确。
答案 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将是您要移动到所需目录的文件