【问题标题】:upload multiple images in php using pdo使用 pdo 在 php 中上传多个图像
【发布时间】:2013-02-06 10:32:42
【问题描述】:

我打算一次将许多图像上传到一个文件夹中,并将它们的信息保存到一个数据库中。

就目前而言,无论我选择一个还是多个,代码都会正确地将这些图像上传到文件夹中。但是,当我选择很多时,它不会将图像的信息存储到数据库中,而只会将图像上传到文件夹中。如果我选择一张图片,那么它会将该图片的信息正确存储到数据库中。

下面是我的代码。

<?php
#connect to the db
require_once('db.inc.php');
?>
<html>
<head>
</head>
<body>
<form action="" method="POST" enctype="multipart/form-data">
    <input type="file" name="files[]" multiple/>
    <input type="submit"/>
</form>
<?php
if(isset($_FILES['files'])){
    $errors= array();
    foreach($_FILES['files']['tmp_name'] as $key => $tmp_name ){
        $file_name = $key.$_FILES['files']['name'][$key];
        $file_size =$_FILES['files']['size'][$key];
        $file_tmp =$_FILES['files']['tmp_name'][$key];
        $file_type=$_FILES['files']['type'][$key];  
        if($file_size > 2097152){
            $errors[]='File size must be less than 2 MB';
        }try{       
$query ="INSERT into tish_images(FILE_NAME,FILE_SIZE,FILE_TYPE)
VALUES(:FILE_NAME,:FILE_SIZE,:FILE_TYPE)";
$insert = $con->prepare($query);
$insert->execute(array(
':FILE_NAME'=>$file_name,
':FILE_SIZE'=>$file_size,
':FILE_TYPE'=>$file_type));
}catch(PDOException $e){
echo $e->getMessage();
}
$desired_dir="image_uploads";
        if(empty($errors)==true){
            if(is_dir($desired_dir)==false){
                mkdir("$desired_dir", 0700);// Create directory if it does not exist
            }
            if(is_dir("$desired_dir/".$file_name)==false){
                move_uploaded_file($file_tmp,"image_uploads/".$file_name);
            }else{                                  //rename the file if another one exist
                $new_dir="image_uploads/".$file_name.time();
                 rename($file_tmp,$new_dir) ;               
            }


        }else{
                print_r($errors);
        }
    }
    if(empty($error)){
        echo "Success";
    }
}
?>

</body>
</html>

【问题讨论】:

    标签: php mysql


    【解决方案1】:
    <?php
    if(isset($_FILES['files'])){
        $query = "INSERT into tish_images(`FILE_NAME`,`FILE_SIZE`,`FILE_TYPE`)
                 VALUES(:FILE_NAME,:FILE_SIZE,:FILE_TYPE)";
        $stmt  = $con->prepare($query);
        $errors= array();
        foreach($_FILES['files']['tmp_name'] as $key => $error ){
            if ($error != UPLOAD_ERR_OK) {
                $errors[] = $_FILES['files']['name'][$key] . ' was not uploaded.';
                continue;
            }
            $file_name = $key.$_FILES['files']['name'][$key];
            $file_size = $_FILES['files']['size'][$key];
            $file_tmp  = $_FILES['files']['tmp_name'][$key];
            $file_type = $_FILES['files']['type'][$key];  
            if($file_size > 2097152){
                $errors[] = 'File size must be less than 2 MB';
                continue;
            }
            try{       
                $stmt->bindParam( ':FILE_NAME', $file_name , PDO::PARAM_STR );
                $stmt->bindParam( ':FILE_SIZE', $file_size, PDO::PARAM_STR );
                $stmt->bindParam( ':FILE_TYPE', $file_type, PDO::PARAM_STR );
                $stmt->execute();
    
                $desired_dir="image_uploads";
    
                if(is_dir($desired_dir)==false){
                    mkdir($desired_dir, 0700);// Create directory if it does not exist
                }
                if(is_file($desired_dir.'/'.$file_name)==false){
                    move_uploaded_file($file_tmp,$desired_dir.'/'.$file_name);
                }else{    //rename the file if another one exist
                    $new_file=$desired_dir.'/'.$file_name.time();
                    move_uploaded_file($file_tmp,$new_file) ;               
                }
            }catch(PDOException $e){
                $errors[] = $file_name . 'not saved in db.';
                echo $e->getMessage();
            }   
        }
        if(empty($error)){
            echo "Success";
        }
    }
    ?>
    

    我看不出有太多错误,但我已经对 pdo 周围的代码进行了一些重构,使其更具可读性,您现在只需准备一次。我也将实际的移动文件移到了 try 块中,因此您仅在 db 执行中没有错误时尝试(您应该检查插入的状态 - 查看 $stmt->errorCode() 或 $stmt->errorInfo() )。

    【讨论】:

    • 是的,您已修复它,感谢您的帮助,现在我想要将这些图像分配给上传它们的人。例如,伊恩您登录并上传了这些图像。所以当您再次登录时,您将能够单独查看,而不是其他用户?前进的方向或想法是什么
    • @humphrey - 最好的办法是自己尝试编写将图像分配给用户的代码。如果您遇到困难,请发布另一个问题,说明您到目前为止所做的尝试。
    • @humphrey - 另外,如果 Ian 的帖子解决了您最初的问题,那么您应该通过在他的回复中选择“勾号”来接受它作为正确答案:) 欢迎来到 Stack Overflow
    • @DMK 你的意思是他们说这个帖子对你有用吗?
    猜你喜欢
    • 2017-05-21
    • 1970-01-01
    • 2022-12-01
    • 2022-10-19
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 2017-09-10
    相关资源
    最近更新 更多