根据输入创建每个用户的唯一文件夹,并使用php

时间:2019-02-02 04:35:15

标签: php mysql

我正在为创建大学入学考试创建项目。我正在寻找使用用户序列号上传图像并创建文件夹的解决方案,这是按照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");

	}
?>

1 个答案:

答案 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);

我认为您需要在插入之前检查用户是否已经存在(但我不知道您的项目的详细信息)