0

画像を追加するためのファイル入力を含む更新フォームがあります。私が達成しようとしているのは、そのフィールドを空のままにしておくと、ファイルは変更されないということです。そのため、以前にアップロードした写真はそこに残ります。

私のフォーム入力は次のように呼ばれます:<td><?= form_upload('aanbiedingfoto');?></td>

そして、私のデータベースフィールドはfotonaam.

私はこのようなことを試みましたが、うまくいきませんでした: if($_FILES['aanbiedingfoto']['name'] != '') { $data['fotonaam'] = $_FILES['aanbiedingfoto']['name']; }

私は何を間違っていますか?

私のコントローラー:

function editaanbieding()
{
    $data = array(
        'Aanbieding' => $this->input->post('aanbiedingnaam'),
        'Tekst' => $this->input->post('aanbiedingomschrijving'),
        'Prijs' => $this->input->post('aanbiedingprijs'),
        'Conditie' => $this->input->post('aanbiedingconditie')
    );
    if($_FILES['aanbiedingfoto']['name'] != '') { $data['fotonaam'] = $_FILES['aanbiedingfoto']['name']; }
    print_r($_FILES);
    $config['upload_path'] = './assets/uploads/';
    $config['allowed_types'] = 'gif|jpg|png';
    $config['max_size'] = '1000';
    $config['max_width']  = '';
    $config['max_height']  = '';
    $config['overwrite'] = TRUE;
    $config['remove_spaces'] = TRUE;
    $config['file_name'] = $this->input->post('aanbiedingfoto');

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

    if ( ! $this->upload->do_upload('aanbiedingfoto'))
    {
        $error = array('error' => $this->upload->display_errors());
    }else{
     $image_data = $this->upload->data();
    }
    $this->aanbieding_model->edit_aanbieding($data, $image_data);
    redirect('members/aanbiedingen');
}

私のモデル:

function edit_aanbieding($data, $image_data)
{
$id = $this->uri->segment(3);
$id2 = $this->input->post('fotoid');
$id3 = $this->input->post('aanbiedingid');
/*
echo 'bedrijfaanbiedingid ', $id, '<br/>';
echo 'fotoid ', $id2, '<br/>';
echo 'aanbiedingid ', $id3, '<br/>';
die;
*/
$this->db->where('idaanbiedingen', $id3);
$this->db->update('Aanbiedingen', $data);
$this->db->where('idfotoaanbiedingen', $id2);
    $insertfoto = array(
        'fotonaam' => $image_data['file_name']
    );
$this->db->update('fotoaanbiedingen', $insertfoto);
$this->db->where('idbedrijfaanbiedingen', $id);
    }
4

2 に答える 2

1

アップロード コードを if ステートメント内に配置します。

    <?php
    if($_FILES['aanbiedingfoto']['name'] != ''){
        if ( ! $this->upload->do_upload('aanbiedingfoto')){
            $error = array('error' => $this->upload->display_errors());
        }else{
         $image_data = $this->upload->data();
        }
        $this->aanbieding_model->edit_aanbieding($data, $image_data, true);
    }else{
        $this->aanbieding_model->edit_aanbieding($data, $image_data, false);
    }
    ?>

これが編集機能です

    <?php
    function edit_aanbieding($data, $image_data, $uploaded = false){       
        $id = $this->uri->segment(3);
        $id2 = $this->input->post('fotoid');
        $id3 = $this->input->post('aanbiedingid');
        /*
        echo 'bedrijfaanbiedingid ', $id, '<br/>';
        echo 'fotoid ', $id2, '<br/>';
        echo 'aanbiedingid ', $id3, '<br/>';
        die;
        */
        $this->db->where('idaanbiedingen', $id3);
        $this->db->update('Aanbiedingen', $data);
        $this->db->where('idfotoaanbiedingen', $id2);
        if($uploaded){      //update photo code
            $insertfoto = array('fotonaam' => $image_data['file_name']);
            $this->db->where('idbedrijfaanbiedingen', $id);
            $this->db->update('fotoaanbiedingen', $insertfoto);
        }
    }
?>
于 2013-06-21T09:06:36.680 に答える
0

ファイルをアップロードしない場合は$image_dataNULL.

より良い解決策がありますが、これは次のように簡単に修正できます:
モデルでこのセクションを見つけて、以下のように変更します。

if (isset($image_data)) {
    $insertfoto = array(
        'fotonaam' => $image_data['file_name']
    );
    $this->db->where(...); // Fill the blank with correct arguments
    $this->db->update('fotoaanbiedingen', $insertfoto);
}

サイドノート:

これは完全にオプションです。パフォーマンスを向上させ、起こりうるエラーを取り除くために、次のことをお勧めします。

  • ライブラリをロードしたり、必要のないときにメソッドを呼び出したりすることは避けてください。
  • 関数の引数のデフォルト値を設定します。

デモとして:

コントローラー:

...
if (! empty($_FILES['aanbiedingfoto']['name'])) {
    $data['fotonaam']        = $_FILES['aanbiedingfoto']['name'];
    $config['upload_path']   = './assets/uploads/';
    $config['allowed_types'] = 'gif|jpg|png';
    $config['max_size']      = '1000';
    $config['max_width']     = '';
    $config['max_height']    = '';
    $config['overwrite']     = TRUE;
    $config['remove_spaces'] = TRUE;
    $config['file_name']     = $this->input->post('aanbiedingfoto');

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

    if ($this->upload->do_upload('aanbiedingfoto')) {
        $this->aanbieding_model->edit_aanbieding($data, $this->upload->data());
    } else {
        $error = array('error' => $this->upload->display_errors());
        // If you want to update the table while the uploading failed
        $this->aanbieding_model->edit_aanbieding($data);
    }
}
...

モデル:

function edit_aanbieding($data, $image_data = NULL)
{
    ...
    if (isset($image_data)) {
        $insertfoto = array(
            'fotonaam' => $image_data['file_name']
        );
        $this->db->where(...); // Fill the blank with correct arguments
        $this->db->update('fotoaanbiedingen', $insertfoto);
    }
    ...
}
于 2013-06-21T08:54:39.647 に答える