2016-02-05 16 views
5

Mam dwie tabele dla tej kategorii produktów, w których przechowuję kategorie produktów, a druga to lista produktów, w której wstawiam produkty po wstawieniu nowego produktu. aby wybrać kategorie z kategorii produktów, ale jeśli chcesz dodać kolejną kategorię, w menu pojawi się opcja "inne", a obszar tekstowy pojawi się i pozwoli Ci utworzyć inną kategorię, mój problem polega na tym, że dodam nowy produkt z istniejącej kategorii w bazie danych nie robi wstawić do dwóch tabel, ale jeśli dodać nowy produkt z nowej kategorii to sukcesem wstawia mojego kontrolera:Wstawka kodu, jeśli nie istnieje i aktualizuje się, jeśli nie

function do_upload() { 


    $config['upload_path'] = './assets/'; 
    $config['allowed_types'] = 'gif|jpg|png'; 
    $config['max_size'] = '2000'; 
    $config['max_width'] = '2000'; 
    $config['max_height'] = '2000'; 
    $config['new_image'] = './assets/'; 

    $config['overwrite'] = TRUE; 
    $this->load->library('upload', $config); 
    $this->form_validation->set_rules('name', 'Product Name', 'required|xss_clean'); 
    $this->form_validation->set_rules('description', 'Product Description', 'required|xss_clean'); 
    $this->form_validation->set_rules('price', 'Price', 'required'); 
    if (!$this->upload->do_upload() || !$this->form_validation->run()) { 
     $error = array('error' => $this->upload->display_errors()); 
     redirect('add_products'); 
    } else { 

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

     $category = $_POST["prod_category"]; 
     if($category == "2") 
      { 
      $category = $_POST["other_category"]; 

      } 
     $file = array(
      'img_name' => $data['raw_name'], 
      'thumb_name' => $data['raw_name'] . '_thumb', 
      'ext' => $data['file_ext'], 
      'product_name' => $this->input->post('name'), 
      'product_description' => $this->input->post('description'), 
      'product_price' => $this->input->post('price'), 
      'product_category' =>$category,  


     ); 

     $this->db->insert("product_category",array("category"=>$category)); 
      $this->User->insert_prod($file); 
     $data = array('upload_data' => $this->upload->data()); 
     echo '<script>alert("You Have Successfully Added a new Product!");</script>'; 
     redirect('admin_products','refresh'); 
    } 
} 

modelu

public function insert_prod($file){ 
     $this->db->insert('product_table',$file); 
    } 
+0

Nie wiem, czy to kwalifikuje się jako odpowiedź: http://andrea.codes/codeigniter-if-record-exists-then-update-if -not-insert/ To zbyt szczegółowe wzorzec ... – SparK

+0

próbował użyć go, ale nie może sprawić, żeby działało. – Christian

Odpowiedz

9

Najpierw należy sprawdzić, czy użytkownik lub dane są zamykane, czy nie. następnie możesz wykonać operację aktualizacji i wstawiania.

$this->db->where('user_id',$id); 
    $q = $this->db->get('profile'); 

    if ($q->num_rows() > 0) 
    { 
     $this->db->where('user_id',$id); 
     $this->db->update('profile',$data); 
    } else { 
     $this->db->set('user_id', $id); 
     $this->db->insert('profile',$data); 
    } 

Jest jeszcze jeden sposób, za pomocą MySQL Query

$query = 'INSERT INTO table_name (id, name) VALUES (?, ?) 
    ON DUPLICATE KEY UPDATE name=VALUES(name)'; 

Wyjaśnienie Załóżmy, to jest stół.

+----+----------+ 
| id | name  | 
+----+----------+ 
| 1 | Urfusion | 
| 2 | Christian| 
+----+----------+ 

teraz wykonujemy ON DUPLICATE KEY UPDATE

INSERT INTO table_name VALUES (3,'Example') ON DUPLICATE KEY UPDATE name='Example'; 

wynik jest

+----+----------+ 
| id | name  | 
+----+----------+ 
| 1 | Urfusion | 
| 2 | Christian| 
| 3 | Example | 
+----+----------+ 

Example został wstawiony do tabeli, ponieważ nie ma klawiszem id jest tam teraz, gdy jesteśmy próbując wstawić dane na pozycji 1 lub 2, następnie

INSERT INTO table_name VALUES (1,'Name_changed') ON DUPLICATE KEY UPDATE name='Name_changed'; 

Następnie wynik jest

| id | name  | 
+----+-------------+ 
| 1 | Name_changed| 
| 2 | Christian | 
| 3 | Example  | 
+----+-------------+ 

Więcej information

+0

Nie jestem zbyt obeznany z drugą opcją, czy możesz wyjaśnić więcej? już przeczytałem link, który podałeś, ale to mnie myli, pierwsza opcja nie działa dla mnie – Christian

+0

@Christian: sprawdź zaktualizowaną odpowiedź. – urfusion

+0

oh widzę, ale potrzebuję pomocy w implementacji tego, próbowałem go użyć, ale nie działa, więc po prostu wpisuję zapytanie lub potrzebuję czegoś innego, przykład to moja tabela $ query = 'INSERT INTO product_category (id, category) WARTOŚCI (?,?) DOTYCZĄCE DUPLIKATU WERSJI KEY UPDATE = WARTOŚCI (kategoria) "; czy to tak? – Christian