0

以下のコードを使用して、画像のアップロードを処理しています。すべてがうまくいっています。2 つの画像をアップロードするオプションを許可しました。1 つはロゴで、もう 1 つはスクリーンショットです。

アップロードを編集するオプションを提供しているときに、アップロードする新しいファイルを選択して古いファイルを置き換えるなど、この問題が発生しています。

私のimages[]配列では、ループを使用して画像名を 1 つずつ取得します。ただし、ユーザーが 2 番目の画像 (スクリーンショット) を変更したい場合で、ロゴ フィールドで何も選択しない場合は、スクリーンショットのみを変更する必要があります。

ただし、images[]配列では、最初の要素がアップロードの最初の要素になります。両方の画像を選択すると、logo.jpgimages[0]と screenshot.jpg が表示されimages[1]ます。しかし、2 番目の画像のみを選択すると、screenshot.jpg がimages[0]. ただし、変更を有効にするには、配列の最初の要素を空白にし、配列の 2 番目の要素に 2 番目の画像アップロード オプションのデータを含める必要があります。どうすればそれを達成できますか?

$config['upload_path'] = '../uploads/';
            $config['allowed_types'] = '*';
            $config['max_size'] = '0';
            $config['max_width']  = '0';
            $config['max_height']  = '0';

            $this->load->library('upload', $config);
            $image = array();
            foreach ($_FILES as $key => $value) {

                if (!empty($value['tmp_name'])) {

                    if ( ! $this->upload->do_upload($key)) {
                        $error = array('error' => $this->upload->display_errors());
                        //failed display the errors
                    } else {
                        //success
                        $data =  $this->upload->data();
                            $image[]= $data['file_name'];
                    }

                }
           }
4

1 に答える 1

3

アップロードするたびにアップロードライブラリを初期化する必要があることを忘れないでください。

$this->load->library('upload'); 
$this->upload->initialize($config);

ユーザーガイド:http ://ellislab.com/codeigniter/user-guide/libraries/file_uploading.html

編集:

$ _FILES配列をチェックして、スクリーンショット入力とロゴ入力の名前があるかどうかを確認できます。ない場合は、必要な配列を作成できます。

私はこれを見つけました:

そのデータ構造を作成する簡単な方法は、HTMLファイル入力に別の名前を付けることです。>複数のファイルをアップロードする場合は、次を使用します。

<input type=file name=file1>
<input type=file name=file2>
<input type=file name=file3>

各フィールド名は、$_FILES配列のキーになります。

http://www.php.net/manual/es/features.file-upload.multiple.php#53933

于 2013-02-25T17:13:52.053 に答える