1

1つはユーザー用、もう1つは画像用の2つのテーブルがあります。ログインすると、ユーザーの画像をアップロードできるようになります。ユーザーは画像をアップロードできないため、次の画像をアップロードします。それらとすべてのユーザーは自分の画像を表示できるようになります。複数の画像をアップロードするための有効なコードがありますが、特定のユーザーにそれらを割り当てる方法を説明します。以下のコードは、複数の画像をアップロードするだけです。

<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

ユーザーと画像用に別々のテーブルがありますか、それとも1つのテーブルがありますか?

于 2013-02-07T10:42:19.777 に答える
1

あなたは一つのことをすることができます。画像テーブルにuser_idの列を作成し、画像を挿入するときに、それに応じてそれぞれのuser_idを挿入します。したがって、フロントエンドでは、すべてのユーザーのドロップダウンを設定するか、セッションを使用してユーザーIDを保存している場合は、それを簡単に取得できます。

他に何か必要なことがあれば教えてください。

于 2013-02-07T10:48:33.690 に答える
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

可能なようにすべてのアップロードを1つの列に保存したいがabc.jpg;xyz.bmp;blah.mp3、その列に保存されている文字列を処理する必要があるため、以前の方法よりも時間がかかる場合。ファイルを削除したいとしますxyz.bmp。すべてのファイルを抽出し、その特定のエントリを配列から削除してから、それらをそのセルに書き戻す必要があります。データベースから行を削除または選択するのではなく、はるかに長い時間がかかります...真剣に。

于 2013-02-07T10:49:45.017 に答える