2015-02-08 43 views
1

我有三个文件被用户上传到数据库中,一旦他们竞争表单的话。问题是我有3个不同的下载脚本来检索文件...文件正在进入数据库为fileName1, fileName2, fileName3 and File1, File2, File3。有没有办法只有1个下载脚本而不是3个不同的脚本?根据用户点击更改文件名称

下面是相关代码:

$id = $_GET['id']; 
$query = "SELECT FileName3, File3 " . 
     "FROM UserUploads WHERE ID = '$id'"; 

$result = mysqli_query($connection, $query) or die('Error, query failed'); 
list($filename3, $file3) = mysqli_fetch_array($result); 

header("Content-Disposition: attachment; filename=$filename3"); 
echo $file3; 

我可以添加所有fileName1, fileName2, fileName3 and File1, File2, File3SELECT语句,但问题是header()echo行之后......我怎样才能改变这种根据用户点击了什么?

+0

首先:你知道SQL注入吗?你的代码不好! – Aitch 2015-02-08 22:11:10

回答

1

如果您为一个用户提供3个下载链接。每个链接都有一个参数,例如“文件”:

http://your-domain.com/download.php?file=1&id=1234 
http://your-domain.com/download.php?file=2&id=1234 
http://your-domain.com/download.php?file=3&id=1234 

将开关大小写块添加到文件中。

$id = (int)$_GET['id']; 
$file = (int)$_GET['file']; 

if($file <= 0 || $file >= 4) { 
    die('bad boy'); 
} 

$query = "SELECT FileName$file as filename, File$file as file " . 
     "FROM UserUploads WHERE ID = '$id'"; 

$result = mysqli_query($connection, $query) or die('Error, query failed'); 
list($fn, $data) = mysqli_fetch_array($result); 

header("Content-Disposition: attachment; filename=$fn"); 
echo $data; 

没有测试过。