PHP / MySQL - данные вводятся дважды при одной загрузке - PullRequest
0 голосов
/ 10 мая 2018

Я пытаюсь загрузить изображение в базу данных MySQL.Но у меня есть проблема, когда я пытаюсь загрузить одно изображение, изображение вставляется дважды.

Например: у меня есть "A.jpg" , если я пытаюсь загрузить его

вставленные данные будут иметь вид "A.jpg, A.jpg"

Что я хочу в базе данных "A.jpg"

и если я попытаюсь загрузить несколько изображений, таких как "A.jpg, B.jpg and C.jpg"

, вставленные данные будут выглядеть как "B.jpg, B.jpg, C.jpg, C.jpg"

Что я хочу в базе данных "A.jpg, B.jpg, C.jpg "

Я пытался выполнить поиск в Google, но без результатов, кто-нибудь может помочь мне решить эту проблему?Спасибо

Вот мой код:

include('koneksi.php');
date_default_timezone_set('Asia/Jakarta');
$id_user = $_POST['id_user'];
$caption = $_POST['caption'];
$files = [];
foreach($_FILES['files']['name'] as $i => $name) {

    $name = $_FILES['files']['name'][$i];
    $size = $_FILES['files']['size'][$i];
    $type = $_FILES['files']['type'][$i];
    $tmp = $_FILES['files']['tmp_name'][$i];

    $explode = explode('.', $name);


    $ext = end($explode);

    $updatdName = $explode[0] . time() .'.'. $ext;
    $path = 'gallery/';
    $path = $path . basename( $updatdName );

    if(empty($_FILES['files']['tmp_name'][$i])) {
        $errors[] = 'Please choose at least 1 file to be uploaded.';
    }else {

        $allowed = array('jpg','JPG','jpeg','JPEG','gif','GIF','bmp','BMP','png','PNG');

        $max_file_size = 1024*1024*2;; // 2MB

        if(in_array($ext, $allowed) === false) {
            $errors[] = 'The file <b>'.$name.'</b> extension is not allowed.';
        }

        if($size > $max_file_size) {
            $errors[] = 'The file <b>'.$name.'</b> size is too hight.';
        }

    }

    if(empty($errors)) {

        // if there is no error then set values
        $files['file_name'][] = $updatdName;
        $files['size'][] = $size;
        $files['type'][] = $type;
        $errors = array();
        if(!file_exists('gallery')) {
            mkdir('gallery', 0777);
        }

        if(move_uploaded_file($tmp, $path)) {
            echo '<script>window.history.back()</script>';
        }else {
            echo 'Something went wrong while uploading 
     <b>'.$name.'</b>';
        }

    }else {
        foreach($errors as $error) {
            echo '<p>'.$error.'<p>';
        }
    }

}

if(!empty($files)) {

    $files['file_name'][] = $updatdName;
    $files['size'][] = $size;
    $files['type'][] = $type;
    $names = implode(',', $files['file_name']);
    $sizes = implode(',', $files['size']);
    $types = implode(',', $files['type']);
    $sql="INSERT into status VALUES(NULL, '$id_user', '$names','$caption','foto',NOW()); ";
    mysqli_query($koneksi, $sql);
}

1 Ответ

0 голосов
/ 10 мая 2018

Вы устанавливаете $files['file_name'][] в while loop, а также прямо перед вставкой в ​​БД.Вам просто нужно удалить второй вызов $files['file_name'][] = $updatdName;

Вот упрощенная версия того, что вы делаете.

<?php

$_FILES[] = ['name' => 'A'];
$_FILES[] = ['name' => 'B'];
$_FILES[] = ['name' => 'C'];

$files = [];

foreach ($_FILES as $file) {

    $updatdName = $file['name'];

    // You're setting it here
    $files['file_name'][] = $updatdName;
}

if (!empty($files)) {

    // And also here. 
    $files['file_name'][] = $updatdName;

    $names = implode(',', $files['file_name']);
    echo $names;
}
...