我有一个项目,我的用户可以在其中下载文件(pdf、docs、txt、图像等)。所以我提供了一个这样的下载链接-
<li><a href="home.php?search=<?php echo $search_string; ?>&search_submit=Search&page=<?php echo $page; ?>&download=<?php echo $result_materialsID; ?>">
Download</a></li>
然后我检查我的 $_GET 方法我检查这样的条件 -
if(isset($_GET['download']))
{
$material_to_download = $_GET['download'];
$result_update_materials = mysqli_query($connection,"Update Materials SET numDownload=(numDownload+1) where materialsID = {$_GET['download']}");
if(!$result_update_materials)
{
die("Database update numDownload materials failed:".mysqli_error($connection));
}
$result_get_materials_l = mysqli_query($connection,"SELECT downloadLink FROM Materials where materialsID = {$_GET['download']}");
if(!$result_get_materials_l)
{
die("Database get materials failed:".mysqli_error($connection));
}
else
{
while($row = mysqli_fetch_array($result_get_materials_l))
{
download_file($row[0]);
}
}
}
它在我检查其他 $_GET 变量的嵌套 ifs 下。函数 download_file 如下:
function download_file($file)
{
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
}
}
问题: 问题是,当我单击下载链接时,文件下载正常,并且随着代码的运行,我的数据库应该将 numDownload 递增 1。但它会递增 2。numDownload 正在跟踪下载的总数那个文件。所以我认为我的代码的更新部分实际上运行了两次。
我试过unset($_GET['download'])
但没有帮助。知道出了什么问题吗?谢谢。