1

我有两张表,一张用于用户,一张用于图片我想要实现的是,如果我登录,我可以为用户上传图片因为不允许用户上传图片我想上传图片他们和每个用户都将能够查看自己的图像。我有一个工作代码来上传多个图像,但现在如何将它们分配给特定用户。下面的代码只是上传多张图片。

<form action="" method="POST" enctype="multipart/form-data">
    <input type="file" name="files[]" multiple/>
    <input type="submit"/>
</form>
<?php
$username = (isset ($_POST['username']));
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";
    }
}
?>
4

3 回答 3

1

您有单独的用户表和图像表还是一张表?

于 2013-02-07T10:42:19.777 回答
1

你可以做一件事。在 images 表中为 user_id 创建一个列,并在插入图像时相应地插入相应的 user_id。因此,在前端,您可以拥有所有用户的下拉列表,或者如果您使用会话来存储用户 ID,那么您可以轻松获得。

如果您需要其他任何东西,请告诉我。

于 2013-02-07T10:48:33.690 回答
1

您需要一个users_uploads包含以下字段的表格:user_idfile_name. 之后,您将获得如下数据:

user_id : file_name
1 : abc.jpg
2 : 123.png
1 : xyz.bmp
1 : blah.mp3
3 : blah.mp3

如果您想像可能一样将所有上传内容存储在一个列中abc.jpg;xyz.bmp;blah.mp3,但它比以前的方式慢,因为您需要处理存储在该列中的字符串。想象一下,您想删除一个文件xyz.bmp,您需要提取所有文件,从数组中删除该特定条目,然后将它们写回该单元格。这需要更长的时间,而不是从数据库中删除或选择一行......严重。

于 2013-02-07T10:49:45.017 回答