从 mysql 数据库中的多个列压缩和下载多个文件


Zipping and downloading multiple files from multiple columns in mysql database

我有一个简单的脚本,比如添加到购物车,我可以在其中放置多个文件以供以后下载。当用户单击添加到购物车时,我将文件的ID存储在会话中,当他单击下载所有基于ID存储的ID时,它会查找到数据库表中并下载文件。

所有文件都存储在同一个文件夹中,我将名称保存在表中。我面临的问题是,在表中我有 3 列,其中包含不同的文件(项目)。这就是我到目前为止所拥有的,并且正在为一个专栏工作。问题是如何添加其他两列?

$files = $_SESSION['itemid'];
$valid_files = array();
if(is_array($files)) {
    foreach($files as $file) {
        $sql = "SELECT * FROM document_upload WHERE upload_id = :id"; 
        $result = $pdo->prepare($sql);
        $result->bindParam(":id", $file);
        $result->execute();                 
        $resArray = $result->fetch();
        if (file_exists($filePath . $resArray['upload_lesson_plan'])){
            $valid_files[] = $resArray;
        }
    }    
}
if(count($valid_files > 0)){
    $zip = new ZipArchive();
    $zip_name = "zipfile.zip";
    if($zip->open($zip_name, ZIPARCHIVE::CREATE)!==TRUE){
         $error .= "* Sorry ZIP creation failed at this time";
}
foreach($valid_files as $res){
    $zip->addFile($filePath.$res['upload_lesson_plan']);
       // columns that I want to add and take files from...
    //$zip->addFile($filePath.$res['upload_worksheet']);
    //$zip->addFile($filePath.$res['upload_materials']);
}

这两列都是我想从中获取文件的列

    //$zip->addFile($filePath.$res['upload_worksheet']);
    //$zip->addFile($filePath.$res['upload_materials']);

我已经尝试过这样的事情,但不起作用......只是向我显示空白页面,没有下载任何东西,也没有错误。

if (file_exists($filePath . $resArray['upload_lesson_plan'] || $filePath . $resArray['upload_worksheet'] || $filePath . $resArray['upload_materials']))

它们存储在列中,并且是同一列中的多个文件,以逗号分隔。

根据你所说的

它们存储在列中,并且是同一列中的多个文件,以逗号分隔。

你可以试试这种方式。用爆炸它们:

   foreach($resArray as $col){
   $items = explode(',', $col);
   foreach ($items as $item) {
       if (file_exists($filePath . trim($item))){
            $valid_files[] = $filePath . trim($item);
       }       
   } 

然后这样称呼他们

foreach($valid_files as $res){
  $zip->addFile($res);
}   

只是

foreach(['upload_lesson_plan', 'upload_worksheet', 'upload_materials'] as $col){
    if (file_exists($filePath . $resArray[$col])){
        $valid_files[] = $resArray[$col];
    }
}