首页 > 解决方案 > 在用户之间共享文件

问题描述

我创建了一个基于 PHP MySQL 的应用程序,并且正在使用 XAMP 服务器。目前,我已经为用户创建了注册和登录功能,用户可以上传和下载自己的文件。所有文件都存储在 uploads/ 文件夹中。我已使用用户 ID 将这些文件存储在另一个表中。所以一个表用于存储用户的详细信息,另一个表用于根据用户的 id 存储用户的文件。现在,我想创建允许用户将文件共享给另一个用户的功能。

当我获取用户上传的所有文件时,我试图在文件旁边显示一个按钮,上面写着“共享”,该按钮发送用户文件名,但我不确定如何传递我想要的其他用户的 id共享文件并通过该文件,我如何将文件共享给选定的用户。下面是显示登录用户文件的代码和可以实现共享的链接。

while ($row = mysqli_fetch_array($result)){ 
        $filename = $row['file'];
        $filetype = $row['type'];
        $filesize = $row['size'];
        echo "
        <tr>
        <td>$filename</td>
        <td>$filetype</td>
        <td>$filesize KB</td>
        <td><a href='uploads/$filename' target='_blank'> Download file </br></td>
        <td><a href='delete.php?del=$filename' class='link'>Delete</td> 
        <td> <a href='shareFile.php?share=$filename' class='shareFile'>Share File </td>
        </tr>";



    }

}
else {
    echo "<p>NO FILES UPLOADED YET</p>";
}

下表为用户:

CREATE TABLE `users` (
  `id` int(11) NOT NULL,
  `username` varchar(100) NOT NULL,
  `password` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

用户上传的文件根据用户的id存放在user_files中。下面是 user_files 表的表:

CREATE TABLE `user_files` (
  `id` int(11) NOT NULL,
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
  `file` longtext NOT NULL,
  `uploaded_on` datetime NOT NULL,
  `type` varchar(30) NOT NULL,
  `size` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

标签: phphtmlmysqli

解决方案


首先,我没有在 user_files 表中看到用户拥有该文件的参考。

添加该列后,我建议创建一个新表,谁将拥有与谁共享 fileId 的信息。完整的数据库应如下所示:

用户:

CREATE TABLE `users` (
  `id` int(11) NOT NULL,
  `username` varchar(100) NOT NULL,
  `password` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

用户文件:

CREATE TABLE `user_files` (
  `id` int(11) NOT NULL,
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
  `file` longtext NOT NULL,
  `uploaded_on` datetime NOT NULL,
  `type` varchar(30) NOT NULL,
  `size` int(11) NOT NULL.
  `user_id` int(11) NOT NULL REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

跟...一起分享:

CREATE TABLE `shared_files` (
  `id` int(11) NOT NULL,
  `file_id` int(11) NOT_NULL REFERENCES user_files(id) ON DELETE CASCADE
  `with_user_id` int(11) NOT NULL REFERENCES users(id) ON DELETE CASCADE

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

希望能帮助到你 :)


推荐阅读