0

過去数時間試していたこの問題を実行しています。データベースに保存する詳細を含む画像をアップロードしています。

詳細と画像パスを保存し、魅力的に機能します。次に編集部分です。入力ファイルが空かどうかを確認しようとしています。空である場合は詳細のみを更新し、そうでない場合は画像を削除して新しい画像を再アップロードします。問題はこれです:

入力ファイルが空の場合はすべて問題なく更新されます。空でない場合は詳細が更新されますが、画像は同じであり、削除または再アップロードされません。ここにコードがあります

$image_input = $this->input->post('image');
    if(isset($image_input) && !empty($image_input))
    {
        $this->db->where('id', $id);
        $img = $this->db->get('menus_category', 1);
        if($img->num_rows() > 0)
        {
            $row = $img->row();
            $original_image = $row->image;
            $desktop_image = $row->desk_img;
            $mobile_image = $row->mob_img;
            $thumb_image = $row->thumb;
            $unlink_image = unlink('./uploads/menus/' . $original_image);
            $unlink_desk = unlink('./uploads/menus/desk/' . $desktop_image);
            $unlink_mob = unlink('./uploads/menus/mobile/' . $mobile_image);
            $unlink_thumb = unlink('./uploads/menus/thumbs/' . $thumb_image);
            if($unlink_desk && $unlink_image && $unlink_mob && $unlink_thumb)
            {
                $config = array(
                'upload_path' => './uploads/menus',
                'allowed_types' => 'gif|jpg|jpeg|png',
                'max_size' => '15000'
                );
                $this->upload->initialize($config);

                if ($this->upload->do_upload('image'))
                {

                    $image_data = $this->upload->data();

                    $this->load->library('image_lib');
                    // thumb resize
                    $thumbnail = 'thumb_' . $image_data['file_name'];
                    $thumb = array(
                        'image_library' => 'GD2',
                        'source_image' => $image_data['full_path'],
                        'new_image' => $image_data['file_path'] . 'thumbs/' . $thumbnail,
                        'maintain_ratio' => TRUE,
                        'width' => '90',
                        'height' => '90'
                    );
                    $this->image_lib->initialize($thumb);
                    $this->image_lib->resize();
                    $this->image_lib->clear();

                    // mobile resize
                    $mob = 'mob_' . $image_data['file_name'];
                    $thumb_mob = array(
                        'image_library' => 'GD2',
                        'source_image' => $image_data['full_path'],
                        'new_image' => $image_data['file_path'] . 'mobile/' . $mob,
                        'maintain_ratio' => FALSE,
                        'width' => '290',
                        'height' => '83'
                    );
                    $this->image_lib->initialize($thumb_mob);
                    $this->image_lib->resize();
                    $this->image_lib->clear();

                    // desktop resize

                    $desk = 'desk_' . $image_data['file_name'];
                    $thumb_desk = array(
                        'image_library' => 'GD2',
                        'source_image' => $image_data['full_path'],
                        'new_image' =>  $image_data['file_path'] . 'desk/' . $desk,
                        'maintain_ratio' => FALSE,
                        'width' => '700',
                        'height' => '200'
                    );
                    $this->image_lib->initialize($thumb_desk);
                    $this->image_lib->resize();
                    $this->image_lib->clear();

                    // insert path and details to database
                    $data = array(
                        'title' => $input['title'],
                        'slug' => $this->_check_slug($input['title']),
                        'description' => $input['description'],
                        'image' => $image_data['file_name'],
                        'desk_img' => $desk,
                        'mob_img' => $mob,
                        'thumb' => $thumbnail
                    );
                    $this->db->where('id', $id);
                    return $this->db->update('menus_category', $data);
                }
                else 
                {
                    echo $this->image_lib->display_errors();
                }
            }
        }
    }

    else
    {
        $data2 = array(
            'title' => $input['title'],
            'slug' => $this->_check_slug($input['slug']),
            'description' => $input['description']
        );
        $this->db->where('id', $id);
        return $this->db->update('menus_category', $data2);
    }

注: else ステートメントは問題なく動作しますが、最初の if に問題があります。ここで、if を if(isset($image_input)) に変更しました ... ファイル入力が空でない場合は、画像を再アップロードして詳細を更新しますが、画像なしで詳細のみを更新すると、すでにアップロードされていて、更新されていない画像。(これが問題だと思いますが、修正方法がわかりません)。

あなたが私に助けを与えてくれるか、私を正しい方向に導いてくれるなら、私は感謝します. みんなありがとう

4

1 に答える 1

1

まず、これは質問をするコメントになりますが、まだ追加するほどの評判はありません... HTML フォームを投稿できれば、それは役に立ちますが、それがなければ...

1) 送信するフォームの開始タグに enctype="multipart/form-data" があると仮定します。2) ここのコードの 2 行目$this->input->post('image')では、タイプ file のフォーム入力からの 'image' はありますか? その場合、'image' は $_FILES 配列の一部であり、$_POST ではないため、ステートメントは機能しません。つまり、チェックに行くと、常に空(または存在しない)になります。

フォームが思ったとおりに送信されていることを確認するには、投稿にあるコードの最初の行の直前でこれを行います。

var_dump($_POST);
var_dump($_FILES);
exit; // don't let anything run after the dumps.

それがあなたを正しい方向に導くかどうか教えてください。

于 2013-01-07T22:13:03.703 に答える