【发布时间】:2018-07-30 09:14:15
【问题描述】:
我有一个 php 脚本,可以将个人资料图片上传到服务器,然后在数据库中编辑一个字段。
在脚本的顶部,我添加了一行代码,它将在目录中创建一个新文件夹,该文件夹由用户 ID 标记。 ID 与 $id 相呼应。这适用于文件夹,但是当我将上传路径设置为 ../img/users/$id 之类的内容时,它会改为上传到 ..img/users。
代码:
<?php
require '../login_check.php';
include_once 'db_connect.php';
$dir = "../img/users/$id";
if( is_dir($dir) === false )
{
mkdir($dir);
}
fclose($file);
$dir = "./users/$result[id]";
if( is_dir($dir) === false );
$path_to_image_directory = "../img/users/$id";
if(isset($_FILES['imgupload']))
{
$id = $_SESSION['id'];
if ($_FILES["imgupload"]["size"] > 500000)
{
header('Location: ../profile');
}
if(preg_match('/[.](jpg)|(JPG)|(gif)|(GIF)|(PNG)|(png)$/',
$_FILES['imgupload']['name']))
{
$source = $_FILES['imgupload']['tmp_name'];
$randString = md5(time());
$filename = $_FILES['imgupload']['name'];
$splitName = explode(".", $filename);
$fileExt = end($splitName);
$newfilename = strtolower($randString.'.'.$fileExt);
$target = $path_to_image_directory . $newfilename;
move_uploaded_file($source, $target);
$updatestmt = $conn->prepare("UPDATE members SET profilepic= ? WHERE id = ?");
$updatestmt->bind_param("si", $newfilename, $id);
$updatestmt->execute();
header('Location: ../profile');
}
else
{
header('Location: ../profile');
}
}
?>
谁能告诉我我做错了什么以及如何解决这个问题?
【问题讨论】:
-
在
$dir = "../img/users/$id";中使用$id变量之前移动$id = $_SESSION['id'];这一行 -
@SudhirBastakoti 我按照你的建议做了,但这并没有什么不同。我想这就是你告诉我要改变的?
-
$id = $_SESSION['id']; $path_to_image_directory = "../img/users/$id"; if(isset($_FILES['imgupload'])) {
-
是否设置了$id的值??
-
让我猜猜:保存的文件名以用户ID为前缀,对吗?您应该添加
/以包含目录路径,否则您可以连接目录路径,如/path/to/dir和new_filename.txt导致/path/to/dirnew_filename.txt。
标签: php database string upload