在mysql中按用户Id上传文件


Uploading file by User Id in mysql?

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

<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";
    }
}
?>

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

如果你还需要什么,请告诉我。

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

您需要一个类似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,您需要提取所有文件,从数组中删除该特定条目,然后将它们写回该单元格。这需要更长的时间,而不是从数据库中删除或选择一行。。。认真地