2016-04-27 3 views
0

Ich habe ein einfaches Skript wie Add-to-Cart, wo ich mehrere Dateien für den späteren Download legen kann. Wenn der Benutzer auf Hinzufügen zum Warenkorb klickt, speichere ich die ID der Datei in der Sitzung und wenn er auf den Download klickt, wird alles basierend auf den gespeicherten IDs in die Datenbanktabelle gespeichert und die Dateien heruntergeladen.Zippen und Herunterladen von mehreren Dateien aus mehreren Spalten in MySQL-Datenbank

Alle Dateien sind im selben Ordner gespeichert und ich behalte die Namen in der Tabelle. Das Problem, dem ich gegenüberstand, ist, dass ich in der Tabelle 3 Spalten habe, die verschiedene Dateien (Elemente) enthalten. Das habe ich bisher und arbeite für eine Spalte. Frage ist, wie man zwei andere Spalten hinzufügt?

$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']); 
} 

Das sind die beiden Säulen, die ich Dateien von

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

ich so etwas wie dies versucht haben, zu übernehmen wollen, aber nicht funktioniert .. nur ich leere Seite und downloaden Sie nichts und keine Fehler.

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

Sie sind in Spalten gespeichert und sie sind mehrere Dateien in der gleichen Spalte Komma getrennt.

Antwort

0

zu Acording was du gesagt hast

Sie werden in Spalten gespeichert sind, und sie sind mehrere Dateien in derselben Spalte Komma getrennt.

Sie können diesen Weg versuchen. Mit explodieren sie:

foreach($resArray as $col){ 
    $items = explode(',', $col); 

    foreach ($items as $item) { 
     if (file_exists($filePath . trim($item))){ 
      $valid_files[] = $filePath . trim($item); 
     }  
    } 

Und sie dann wie diese für die Antwort des

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

nur

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

Thank nennen, aber ich habe Fehler - 'Achtung: Illegal String Offset 'upload_materials', 'upload_lesson_plan',‚upload_worksheet'' –

+0

Nur zu beachten, dass Spalten auch mehrere Dateien enthalten und sie durch Komma getrennt sind, wenn es sich um eine Angelegenheit handelt. –

+0

Ich bin mir nicht sicher, aber ich habe auch diese 'foreach ($ valid_files als $ res) {$ zip-> addFile ($ filePath. $ Res); ..' geändert und lade jetzt wieder nur eine Datei herunter –

Verwandte Themen