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

Php 从mysql数据库的多个列压缩和下载多个文件,php,mysql,Php,Mysql,我有一个简单的脚本,比如addtocart,我可以把多个文件放在那里供以后下载。当用户单击AddtoCart时,我将文件的ID存储在会话中;当用户单击DownloadAll时,根据ID的存储,查找数据库表并下载文件 所有文件都存储在同一个文件夹中,我将名称保留在表中。我面临的问题是,在表中我有3列,其中包含不同的文件(项目)。这是我到目前为止所拥有的,并且正在为一个专栏工作。问题是如何添加其他两列 $files = $_SESSION['itemid']; $valid_files = arr

我有一个简单的脚本,比如addtocart,我可以把多个文件放在那里供以后下载。当用户单击AddtoCart时,我将文件的ID存储在会话中;当用户单击DownloadAll时,根据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(['upload_lesson_plan', 'upload_worksheet', 'upload_materials'] as $col){
    if (file_exists($filePath . $resArray[$col])){
        $valid_files[] = $resArray[$col];
    }
}

根据你说的

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

你可以这样试试。使用“爆炸它们”:

   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($res有效文件){$zip->addFile($filePath.$res)现在只下载一个文件