2017-10-05 10 views
0

OpenCart MVCで作業していて、データベースレコードの更新に問題があります。私はdbテーブルのすべてのレコードを表示するリストを持っています。各レコードには、オプションとして編集可能なドロップダウンがあります。編集がクリックされると、記入されたフォームが、新しい情報が入力されたときに入力が既存の値で記入されて開かれます(これまでのすべて良好です!)ユーザーは保存ボタンを押してその更新をデータベースに持たせるべきです。現在、保存ボタンのクエリは挿入クエリです。だから私はそれが既にレコードを持っているので、その書き込みではないと思う。また、既存の保存ボタンを使用できるように、新しいボタン(つまり更新)を追加しないでください。これを反映するためにモデルを変更するにはどうすればよいですか?私は挿入と更新クエリと何らかの種類のチェックを持っていますか?コントローラーでこれをやっていますか?私は少しこれを行う方法を混乱させる。クエリを挿入するクエリを挿入する

MODEL:

public function addCampaign($data) { 

     $this->db->query("INSERT INTO " . DB_PREFIX . "campaigns SET campaign_name = '" . $this->db->escape($data['campaign_name']) . "', campaign_giving_goal = '" . (float)$data['campaign_giving_goal'] 
     . "', code = '" . $this->db->escape($data['code']) . "', campaign_active = '" . $this->db->escape($data['campaign_active']) . "', campaign_giving_count_goal = '" . (float)$data['campaign_giving_count_goal'] . "', campaign_owner = '" . $this->db->escape($data['campaign_owner']). "', date_beginning = '" . $this->db->escape($data['date_beginning']). "', date_ending = '" . $this->db->escape($data['date_ending']). "'"); 

     $this->cache->delete('campaign'); 

     return $campaign_id; 
    } 

CONTROL:

public function add() { 
     $this->load->language('campaigns/campaign'); 

     $this->document->setTitle($this->language->get('heading_title')); 

     $this->load->model('campaigns/campaign'); 

     if (($this->request->server['REQUEST_METHOD'] == 'POST')) { 


      $this->model_campaigns_campaign->addCampaign($this->request->post); 
      $this->model_campaigns_campaign->addComponent($this->request->post); 
      $this->session->data['success'] = $this->language->get('text_success'); 
      $url = '';   

      if (isset($this->request->get['order'])) { 
       $url .= '&order=' . $this->request->get['order']; 
      } 

      if (isset($this->request->get['page'])) { 
       $url .= '&page=' . $this->request->get['page']; 
      } 

      $this->response->redirect($this->url->link('campaigns/campaign', 'token=' . $this->session->data['token'] . $url, true)); 
     } 

     $this->getForm(); 

    } 

VIEW:

<div class="cancel-save"> 
        <button type="submit" form="form-campaign" data-toggle="tooltip" title="<?php echo $button_save; ?>" class="btn btn-primary" onclick="submitForms()"><i class="fa fa-save"></i></button> 

        <a href="<?php echo $cancel; ?>" data-toggle="tooltip" title="<?php echo $button_cancel; ?>" class="btn btn-default"><i class="fa fa-reply"></i></a> 
       </div> 
+0

可能であれば、プレースホルダ値*で* prepared statementsを使用してください。これは、PDOの周りの単純なラッパーになる可能性があるので、それらの機能すべてにアクセスする必要があります。 – tadman

答えて

1

はこの1つを試してみてください。 コントローラでこのように変更します。

public function add() { 
    $this->load->language('campaigns/campaign'); 

    $this->document->setTitle($this->language->get('heading_title')); 

    $this->load->model('campaigns/campaign'); 

    if (($this->request->server['REQUEST_METHOD'] == 'POST')) { 
     if (!isset($this->request->get['campaign_id'])) { 
      $this->model_campaigns_campaign->addCampaign($this->request->post); 
      $this->model_campaigns_campaign->addComponent($this->request->post); 
     } else { 
      $this->model_campaigns_campaign->updateCampaign($this->request->get['campaign_id'], $this->request->post); 
      $this->model_campaigns_campaign->updateComponent($this->request->get['campaign_id'], $this->request->post); 
     } 
     $this->session->data['success'] = $this->language->get('text_success'); 
     $url = '';   

     if (isset($this->request->get['order'])) { 
      $url .= '&order=' . $this->request->get['order']; 
     } 

     if (isset($this->request->get['page'])) { 
      $url .= '&page=' . $this->request->get['page']; 
     } 

     $this->response->redirect($this->url->link('campaigns/campaign', 'token=' . $this->session->data['token'] . $url, true)); 
    } 

    $this->getForm(); 

} 

次に、あなたがそれを書いていないので、私はupdateComponenモデルを提供することができないモデル

public function updateCampaign($campaign_id, $data) { 

    $this->db->query("UPDATE " . DB_PREFIX . "campaigns SET campaign_name = '" . $this->db->escape($data['campaign_name']) . "', campaign_giving_goal = '" . (float)$data['campaign_giving_goal'] 
    . "', code = '" . $this->db->escape($data['code']) . "', campaign_active = '" . $this->db->escape($data['campaign_active']) . "', campaign_giving_count_goal = '" . (float)$data['campaign_giving_count_goal'] . "', campaign_owner = '" . $this->db->escape($data['campaign_owner']). "', date_beginning = '" . $this->db->escape($data['date_beginning']). "', date_ending = '" . $this->db->escape($data['date_ending']). "' WHERE campaign_id = '" . (int)$campaign_id . "'"); 

    $this->cache->delete('campaign'); 
} 

にこのコードを追加します。たぶん、あなたはそれを書くために参照としてupdateCampaignコードを使用することができます。