繁体   English   中英

有一个文件下载链接/按钮同时更新一个 MySQL 数据库

[英]Have A File Download Link/Button Also Update A MySQL Database

我在表格上有一个下载按钮,用于更新 MySQL 数据库,并更新文件的下载次数/下载次数。 我想我可以将download属性添加到此表单按钮并将 url 提供给文件,以便文件也可以下载。 看来您只能在锚<a>链接上使用download属性。 这本身不是问题,我可以像我有按钮一样设置锚链接的样式 - 但我怎样才能得到它,所以当有人单击<a>链接以及下载图像时,它还会将数据提交到数据库?

提交到 MySQL 数据库的表单按钮的简化版本:

<form method="post">
    <button type="submit" name="download">Download</button>
    <input type="hidden" name="filename" value="<?php echo $image_filename; ?>">
</form>

“下载”文件链接:

<a download href="localhost/project/image/file.jpg">Download</a>

我还包括了更新数据库以供参考的 PHP function。 这个 function 在下载图像的页面本身上被调用。 注意: $connection是在函数顶部导入的数据库连接代码。php 文件是 function 所在的文件。

PHP

function downloadCounter($connection, $filename) {
    if (isset($_POST['download'])) {
        // value from a hidden form element which outputs the filename
        $filename = $_POST['filename'];

        try {
            $sql = "UPDATE lj_imageposts SET downloads = downloads +1 WHERE filename = :filename";
            $stmt = $connection->prepare($sql);

            $stmt->execute([
                ':filename' => $filename
            ]);


        } catch (PDOException $e) {
            echo "Error: " . $e->getMessage();
        }
    }
}

您需要在 JS function 中处理这两个操作。 首先你需要更新数据库,然后下载文件

const downloadFile = element => {
   const downloadLink = element.getAttribute("href"); //Get element's href value
   const updateURL = "example.com/update"; //Your server side file to update db
   fetch(updateURL {
      method: 'POST',
      headers: {'Content-Type', 'application/x-www-form-urlencoded'},
      body: `downloadLink=${downloadLink}`
   })
   .then(result = > {
      //If successful, download the file
      location.href = downloadLink;
   })
   .catch(error = > {
      //Handle the error
   });
};

还有你a标签

<a onclick="downloadFile(this)" href="localhost/project/image/file.jpg">Download</a>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM