sanmexma
sanmexma

Reputation: 75

How to implode image file names into mysql database

I am uploading multiple images to my sql database but my implode method isn't working...

if(isset($_POST['submit'])) {
    $id     = $_POST['id'];
    for($i = 0; $i < count($_FILES['file_upload']['name']); $i++){
      $filetmp  = $_FILES['file_upload']['tmp_name'][$i];
      $filename = basename($_FILES['file_upload']['name'][$i]);
      $filetype = $_FILES['file_upload']['type'][$i];
      $filepath = "../images/".$filename;
      move_uploaded_file($filetmp,$filepath);
    }
      $mainfiles = implode(", ", $filename);

      $sql  = "INSERT INTO pictures2 (";
      $sql .= "image, photograph_id";
      $sql .= ") VALUES ('";
      $sql .= $database->escape_character($mainfiles) ."', '";  
      $sql .= $id ."')";
      $result = $database->query($sql);
        if($result){
        $session->message('<div class="success-msg">Pictures uploaded sucessfully.</div>');
        }

}

Upvotes: 0

Views: 719

Answers (2)

sam
sam

Reputation: 246

$filename should be an array. You are passing string into implode function. Do something like this.

 if(isset($_POST['submit'])) {
    $id     = $_POST['id'];
    $filename= [];
    for($i = 0; $i < count($_FILES['file_upload']['name']); $i++){
      $filetmp  = $_FILES['file_upload']['tmp_name'][$i];
      $filename[] = basename($_FILES['file_upload']['name'][$i]);
      $filetype = $_FILES['file_upload']['type'][$i];
      $filepath = "../images/".$filename[$i];
      move_uploaded_file($filetmp,$filepath);
    }
      $mainfiles = implode(", ", $filename);

      $sql  = "INSERT INTO pictures2 (";
      $sql .= "image, photograph_id";
      $sql .= ") VALUES ('";
      $sql .= $database->escape_character($mainfiles) ."', '";  
      $sql .= $id ."')";
      $result = $database->query($sql);
        if($result){
        $session->message('<div class="success-msg">Pictures uploaded sucessfully.</div>');
        }

}

Hope this helps.

Upvotes: 1

Rahul
Rahul

Reputation: 18567

Made changes like this, I am considering $id is your photograph_id

if (isset($_POST['submit'])) {
    $id = $_POST['id'];
    for ($i = 0; $i < count($_FILES['file_upload']['name']); $i++) {
        $filetmp    = $_FILES['file_upload']['tmp_name'][$i];
        $filename[] = [$id, basename($_FILES['file_upload']['name'][$i])]; // here changes
        $filetype   = $_FILES['file_upload']['type'][$i];
        $filepath   = "../images/" . $filename;
        move_uploaded_file($filetmp, $filepath);
    }
    // I made changes at below code
    $valueStr = array_map(function ($item) {
        return "('" . implode("','", $item) . "'),"; // to convert into `,` separated values
    }, $filename);
    $mainfiles = rtrim(implode("", $valueStr), ','); // removing right training `,`

    $sql = "INSERT INTO pictures2 (";
    $sql .= "image, photograph_id";
    $sql .= ") VALUES ('";
    $sql .= $database->escape_character($mainfiles) . "', '";
    $sql .= $id . "')";
    $result = $database->query($sql);
    if ($result) {
        $session->message('<div class="success-msg">Pictures uploaded sucessfully.</div>');
    }

}

Upvotes: 1

Related Questions