【问题标题】:Downloading data to a csv file from MySQL using PHP使用 PHP 将数据从 MySQL 下载到 csv 文件
【发布时间】:2013-01-03 07:58:25
【问题描述】:

如何指定要从数据库下载的文件?

main.php:

    include('databaseConnection.php');

    $result = mysql_query("SELECT * FROM participants");

    while($row = mysql_fetch_array($result)){


$download_me= $row['cv'];

echo $row['name'] . " " . $row['area_of_exp'] . " " ;

echo "<a href='download.php?file=$download_me'> cv </a>";

echo "<br />";
  }

download.php(这就是问题所在):

$file = $_GET['row["cv"]'];  
header('Content-Disposition: attachment; filename="'.$file.'"');
echo $file;

我希望在点击 main.php 中的链接时下载 CV

【问题讨论】:

  • 如果这是新代码,您应该考虑将 mysql 更改为 mysqli。 mysql 库将从 PHP 5.5 版本开始贬值。
  • 简历是存放在数据库中还是存放在数据库外的文件中?在这种情况下,您可以将文件位置存储在 CV 列中。
  • @YourCommonSense 这是完全相同的副本吗?
  • @Mr.Radical 简历存储在数据库中

标签: php mysql database hyperlink download


【解决方案1】:

如果您的文件确实在您的数据库中,您可以通过这种方式检索它:

Main.php:

<?php
  $host = "hostname";
  $user = "username";
  $password = "password";
  $database = "database";

  $link = mysqli_connect($host, $user, $password, $database);
  If (!$link){
      echo ("Unable to connect to database!");
  }
  else {
  $query = "SELECT * FROM participants";    
  $result = mysqli_query($link,$query);

  while ($row = mysqli_fetch_array($result, MYSQLI_BOTH)){

echo $row['name'] . " " . $row['area_of_exp'] . " " . '<a href="download.php?file='.$row['id_participants']. '"\>'." cv </a><br />";
  }


}
mysqli_close($link);
?>

mysql 和更具体的版本:

<?PHP
      include('databaseConnection.php');


      $query = "SELECT * FROM participants";    
      $result = mysql_query($query);

      while ($row = mysql_fetch_array($result, MYSQL_BOTH)){

    echo $row['name'] . " " . $row['area_of_exp'] . " " . '<a href="download.php?file='.$row['id_participants']. '"\>'." cv </a><br />";
      }

      mysql_close($link);
    ?>

下载.php:

<?php


$id_participants = $_GET['file'];

$host = "hostname";
$user = "username";
$password = "password";
$database = "database";

$link = mysqli_connect($host, $user, $password, $database);
If (!$link){
      echo ("Unable to connect to database!");
  }
  else {
$query = "SELECT * FROM participants WHERE id_participants = $id_participants";

$result = mysqli_query($link, $query);
$row = mysqli_fetch_array($result, MYSQLI_BOTH);
$size = $row['File_Size'];
$type = $row['File_Type'];
$name =$row['File_Name'];
$CV = $row['cv'];
// echo $size . "". $type . " ". $name;

header("Content-length: $size");
header("Content-type: $type");
header("Content-Disposition: attachment; filename=$name");
echo $CV;

}
mysqli_close($link);

?>

Mysql 和更具体的:

<?php

include('databaseConnection.php');

$id_participants = $_GET['file'];


$query = "SELECT * FROM participants WHERE id_participants = $id_participants";

$result = mysql_query($query);
$row = mysql_fetch_array($result, MYSQL_BOTH);
$size = $row['File_Size'];
$type = $row['File_Type'];
$name =$row['File_Name'];
$CV = $row['cv'];
// echo $size . "". $type . " ". $name;

header("Content-length: $size");
header("Content-type: $type");
header("Content-Disposition: attachment; filename=$name");
echo $CV;

}
mysql_close();

?>

数据库布局:

CREATE TABLE IF NOT EXISTS `participants` (
  `id_participants` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(30) NOT NULL,
  `area_of_exp` varchar(30) NOT NULL,
  `cv` blob NOT NULL,
  `File_Size` varchar(30) NOT NULL,
  `File_Type` varchar(30) NOT NULL,
  `File_Name` varchar(30) NOT NULL,
  PRIMARY KEY (`id_participants`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

http://www.sqlfiddle.com/#!2/91cb3/4

我建议您不要将简历存储在数据库中。

【讨论】:

  • @Joey939 确保为代码添加安全措施。祝你好运。
  • 感谢您的代码,我已经解决了 :D 它终于可以工作了!非常感谢,我听从了您的建议,将文件上传到服务器,只是使用数据库中的 id 来确定要下载哪个文件,之后需要进行一些小的修改。
【解决方案2】:

我希望$row['cv'] 变量中有一个文件名?

关于文件,你不应该回显变量(那样你只显示文件名)。

要输出文件,你应该使用readfile()。此外,在您的 download.php 文件中,您尝试检索一个不存在的 GET 变量。

例如:

$file = $_GET['file'];
header('Content-Disposition: attachment; filename="'. basename($file) . '"');
readfile($file);

您应该知道 $file 变量应该包含文件的完整路径(无论是绝对路径还是相对路径)。这就是为什么我使用basename()-函数只获取文件名。

【讨论】:

  • 感谢您的回复和指正,如何指定`$GET['file']`中的文件为数据库中的文件?
  • 每当有人访问download.php?file=cv/cv.docx 页面时,cv 文件夹中的文件 cv.docx(从您当前的工作目录开始)就会下载到客户端计算机。小心使用文件名作为参数:有人可以很容易地侵入你的系统。我会建议你使用 cv_id 或类似的东西从 db 并从 db 中获取文件名。另外:我没有包含检查文件是否存在的代码。
  • @Joey939 如果上述答案有效,那么您的文件不在数据库中。如果是这种情况,那么将其存储在数据库中要好得多。
猜你喜欢
  • 2014-03-28
  • 2014-10-07
  • 2015-11-12
  • 2013-12-27
  • 1970-01-01
  • 2015-06-08
  • 2014-12-29
  • 1970-01-01
  • 2017-09-04
相关资源
最近更新 更多