0

https://github.com/joostvanveen/build-a-cms-with-codeigniterコア フォルダーにMY_Model 、ライブラリに Admin_Controller、新しい Web サイトで使用しているソース コードがあります。これがデータをどのように流すかは気に入っていますが、画像のアップロードと更新に問題があります。画像のアップロードはうまくいくのですが、データを編集するたびにデータベースの画像名が消えてしまいます。それらをすべて更新します。他のフィールドの更新を停止する方法は知っていますが、同じ方法が画像に対して機能しません。

これはデータが保存される方法であり、ユーザー モデル (user_m) には検証と新しい変数とテーブルの選択があります。関数 'save' は MY_Model で定義されています。user_m はデフォルトの CI_Model ではなく MY_Model を拡張します。以下のコードは、挿入と更新を行います。save 関数内で定義されます。$id が提供された場合、更新が行われ、それ以外の場合は新しいアイテムが挿入されます。

        // Insert
    if ($id === NULL) {
        !isset($data[$this->_primary_key]) || $data[$this->_primary_key] = NULL;
        $this->db->set($data);
        $this->db->insert($this->_table_name);
        $id = $this->db->insert_id();
    }
    // Update
    else {
        $filter = $this->_primary_filter;
        $id = $filter($id);
        $this->db->set($data);
        $this->db->where($this->_primary_key, $id);
        $this->db->update($this->_table_name);
    }

そして、これはユーザーコントローラーで呼び出される方法です::

$this->user_m->save($data, $id);

$data の定義方法は次のとおりです。

$data = $this->user_m->array_from_post(array('name', 'email', 'password'));

array_from_post 関数は MY_Model で次のように定義されています。

public function array_from_post($fields){

    $data = array();
    foreach ($fields as $field) {
        $data[$field] = $this->input->post($field);
    }
    return $data;
}

tutsplusフォーラムでこれを見つけました:

if(isset($data['password'])){ $data['password'] = $this->user_m->$data['password']; }else{ unset($data['password']); }

このコードは、更新されていないときに $data['password'] の設定を解除するだけで、データベース内の値を変更せずに他のフィールドを更新できます。

画像の更新で同じことを行う方法はありますか? 必要に応じて、より多くのソース コードを提供できます。

JoostVanVeen のコースを知っている人はいますか? データは彼のコースと同じように流れます。

4

0 に答える 0