2017-08-01 1 views
0

Ich habe ein Formular mit einer Dateiauswahl. Ich möchte, dass die Pfade der ausgewählten Dateien nach einem Dezimalpunkt in einem einzelnen Feld in der Datenbank gespeichert werden. Das Problem, das ich habe, ist, dass nur die erste ausgewählte Datei gespeichert wird, und ich möchte alle Dezimalstellen in einem Feld speichern. Eg uploads/1.png, uploads/2.png, uploads/3.png etc .. (IN PHP)PHP - Pfade mehrerer Dateien zu einem Feld in der Datenbank

Wie kann ich das erreichen?

Code:

if(!empty($_FILES['files']['name'][0])) { 
    //Zmienne formularza 
    $files = $_FILES['files']; 
    $thumb = $_FILES['thumbnail']; 
    $text = $_POST['add-project_text']; 
    $h2text = $_POST['add-project_name']; 

    //Dozwolone pliki 
    $allowed = array('txt', 'jpg', 'jpeg', 'png', 'gif', 'svg', 'psd'); 

    foreach ($files['name'] as $position => $file_name) { 
     //Wyciągnięcie parametrów z plików 
     $file_tmp = $files['tmp_name'][$position]; 
     $file_size = $files['size'][$position]; 
     $file_error = $files['error'][$position]; 

     //Dla zdjęć (wyciągniecie rozszerzenia pliku) 
     $file_ext = explode('.', $file_name); 
     $file_ext = strtolower(end($file_ext)); 
     $datenow = date('Y-m-d H:i:s'); 

     //Dla miniaturki 
     $file_extThumb = explode('.', $thumb['name']); 
     $file_extThumb = strtolower(end($file_extThumb)); 

     //Jeżeli rozszerzenie jest prawidłowe 
     if (in_array($file_ext, $allowed)) { 

     //Jeżeli plik nie ma żadnych błędów 
     if($file_error === 0) { 
      //Jeżeli plik nie jest większy niż 15MB 
      if($file_size <= 15728640) { 
       //Jeżeli folder uzytkownika istnieje 
       if(file_exists('uploads/' . $_SESSION['login'])) { 

       } else { 
        //Jeżeli nie, stwórz go. 
        mkdir('uploads/' . $_SESSION['login']); 
       } 

       //Dla zdjęć 
       $file_new_name = uniqid('', true) . '.' . $file_ext; 
       //Dla miniaturki 
       $file_new_nameThumb = 'Thumbnail.' . uniqid('', true) . '.' . $file_extThumb; 

       //Dla zdjęć 
       $file_destination = 'uploads/' . $_SESSION['login'] . '/' . $file_new_name; 
       //Dla miniaturki 
       $file_destinationThumb = 'uploads/' . $_SESSION['login'] . '/' . $file_new_nameThumb; 
       //Jeżeli wszystko jest ok, przenieś go do odpowiedniego folderu 
       if(move_uploaded_file($file_tmp, $file_destination)) { 

        //Jeżeli wszystko jest ok, przenieś go do odpowiedniego folderu 
        if(move_uploaded_file($thumb['tmp_name'], $file_destinationThumb)) { 
         $sqlSTM = $dbh->prepare(" INSERT INTO projects (post_content, post_images, post_image, post_date) VALUES (:post_content, :post_images, :post_image, :post_date) "); 
         $sqlSTM->bindParam(":post_content", $text, PDO::PARAM_STR); 
         $sqlSTM->bindParam(":post_images", $file_destination, PDO::PARAM_STR); 
         $sqlSTM->bindParam(":post_image", $file_destinationThumb, PDO::PARAM_STR); 
         $sqlSTM->bindParam(":post_date", $datenow, PDO::PARAM_STR); 

         $_SESSION['UploadedSuc'] = 'Udało się! Dodano nowy projekt!'; 
        } 
       } 
      } else { 
       $file_size_r = $file_size/1000000; 

       echo 'Wystąpił błąd przy dodawaniu pliku, prawdopodobnie plik jest za duży. Maksymalna wielkość pliku to 15MB. Twój plik: ' . number_format($file_size_r, 0) . 'MB'; 
      } 
     } else { 
      echo 'Wystąpił błąd przy dodawaniu pliku: ' . $file_error; 
     } 
    } else { 
     echo 'To rozszerzenie: <b>' . $file_ext . '</b> jest niedozwolone.'; 
    } 
} 

Ich möchte die Pfade dieser Dateien unter einer Variablen gespeichert werden ": post_images".

Antwort

0

Sie etwas tun könnte, wie:

// Saving the urls 
$post_images = json_encode([$url1, $url2, $url3]); 

// And for getting the urls 
$post_images = json_decode($data['urls']); 
+0

Sorry, aber ich verstehe nicht .. In Variable ** $ file_destination ** Ich habe eine Zeichenfolge, dh den Pfad der Datei, die ich gewählt haben. Diese Variable geht an bindParam ** $ sqlSTM-> bindParam (": post_images", $ file_destination, PDO :: PARAM_STR); ** Ich möchte, dass diese Zeichenfolge vollständig in die Datenbank geschrieben wird .. und dort nur der erste Pfad der Die erste Datei schreibt nur. – nielot

+0

Zum Beispiel. In ** $ file_destination ** gibt es eine Zeichenfolge "uploads/1.png", "uploads/2.png", "uploads/3.png" ... und nur das erste Element "uploads/1png" das speichert in der Datenbank ... – nielot

+0

@nielot Sie könnten Ihre Variable $ file_destination in ein Array ex: [Pfad/img1.jpg, Pfad/img2.jpg] und json_encode das Array transformieren. Speichern Sie dann die codierten Daten in Ihrer Datenbank. (Jetzt haben Sie alle URLs sauber als JSON-String in Ihrer Datenbank gespeichert), und beim Abrufen Ihrer URLs dekodieren Sie sie einfach (json_decode), jetzt haben Sie Ihr Array von URLs zur Verwendung verfügbar. Auf diese Weise ersparen Sie sich den Aufwand, auf "explodieren" zu müssen, um eine Reihe von URLs zu erhalten. – tbrennan

Verwandte Themen