我正在为创建大学入学考试创建项目。我正在寻找使用用户序列号上传图像并创建文件夹的解决方案,这是按照mysql数据库的主要增量id将图像保存在文件夹中的。
这是我的解决方案,其中将图像上载到已创建的文件夹中,称为上载。如何根据我的要求进行修改。
<?php
session_start();
include('../connect.php');
$a = $_POST['name'];
// query
$file_name = strtolower($_FILES['file']['name']);
$file_ext = substr($file_name, strrpos($file_name, '.'));
$prefix = 'your_site_name_'.md5(time()*rand(1, 9999));
$file_name_new = $prefix.$file_ext;
$path = '../uploads/'.$file_name_new;
/* check if the file uploaded successfully */
if(@move_uploaded_file($_FILES['file']['tmp_name'], $path)) {
//do your write to the database filename and other details
$sql = "INSERT INTO student (name,file) VALUES (:a,:h)";
$q = $db->prepare($sql);
$q->execute(array(':a'=>$a,':h'=>$file_name_new));
header("location: students.php");
}
?>
答案 0 :(得分:0)
首先:请小心上传文件,而不正确检查文件的类型;
第二:正如Sean所说,这种方法可能会失控。
-
以下示例更改了您尝试的步骤。
首先插入用户以获取其ID,然后使用它在“ ../ uploads ”下创建文件夹。
通过这种方式,您不需要将文件移动两次(将文件移动到 ../ uploads ,插入用户,然后将文件再次移动到< em> ../ uploads / userID )
<?php
...
$sql = "INSERT INTO student (name,file) VALUES (:a,:h)";
$q = $db->prepare($sql);
$q->execute(array(':a'=>$a,':h'=>$file_name_new));
// Get user id
$studentId = $db->lastInsertId();
// Create path with new userId just inserted
$path = "../uploads/$studentId/";
if(!file_exists($path)) { // maybe "&& !is_dir($path)" ?
// IMPORTANT NOTE: the second argument is the permission of the folder. 0777 is the default and may cause security flaws
mkdir($path, 0777, true);
}
// Move the uploaded file to new path with the userId
@move_uploaded_file($_FILES['file']['tmp_name'], $path.$file_name_new);
我认为您需要在插入之前检查用户是否已经存在(但我不知道您的项目的详细信息)