我有两个表,一个用于用户,一个用于图像 我想要实现的是,如果我登录,我可以为用户上传图像 由于不允许用户上传图像,我想为他们上传图像,每个用户都可以查看自己的图像。我有一个工作代码来上传多个图像,但现在 如何将它们分配给特定用户。 下面的代码只会上传多张图片。
<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";
}
}
?>
答案 0 :(得分:1)
您有单独的用户和图片表或一张表吗?
答案 1 :(得分:1)
你可以做一件事。在images表中为user_id创建一列,当您插入图像时,相应地插入相应的user_id。因此,在前端要么你可以有一个所有用户的下拉菜单,要么你使用会话存储用户ID,那么你就可以轻松搞定。
如果您需要其他任何东西,请告诉我。
答案 2 :(得分:1)
您需要一个类似users_uploads
的表格,其中包含以下字段:user_id
和file_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
,则需要提取所有文件,从数组中删除该特定条目,然后将它们写回该单元格。这需要更长的时间,而不是从数据库中删除或选择一行......认真。