代码之家  ›  专栏  ›  技术社区  ›  Lamberto Fredrick Nababan

PHP/MySQL-在执行单个上载时输入两次数据

  •  0
  • Lamberto Fredrick Nababan  · 技术社区  · 7 年前

    我正在尝试将图像上载到MySQL数据库。但我有一个问题,当我试图上传一幅图像时,图像插入了两次。

    例如: 我有 “A.jpg” 如果我想上传它

    插入的数据如下 “A.jpg,A.jpg”

    我在数据库中需要什么 “A.jpg”

    “A.jpg、B.jpg和C.jpg”

    插入的数据如下 “B.jpg,B.jpg,C.jpg,C.jpg”

    我在数据库中需要什么 “A.jpg、B.jpg、C.jpg”

    我试着在谷歌上搜索,但没有结果,有人能帮我解决这个问题吗?谢谢

    这是我的代码:

    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 回复  |  直到 7 年前
        1
  •  1
  •   waterloomatt    7 年前

    您正在设置 $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;
    }