2016-02-05 15 views
5

ich habe zwei Tabellen für diese Produktkategorie die, wo ich die Produktkategorien und die andere ist die Produktliste, wo ich Produkte einfügen, wenn Sie ein neues Produkt einfügen wird ein sein Dropdown, um aus Kategorien zu wählen, die in der Produktkategorie gespeichert sind, aber wenn Sie eine andere Kategorie hinzufügen möchten, gibt es eine "andere" Option im Dropdown und ein Textfeld wird angezeigt und Sie können eine andere Kategorie erstellen, wenn ich ein neues Produkt mit einem hinzufüge in der Datenbank vorhandene Kategorie es in die beiden Tabellen einfügen tut, aber wenn ich ein neues Produkt mit einer neuen Kategorie hinzuzufügen fügt successfuly meinen Controller:Codeigniter einfügen, wenn nicht vorhanden und update wenn nicht

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'); 
    } 
} 

Modell

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

Nicht sicher, ob es als Antwort qualifiziert: http://andrea.codes/codeigniter-if-record-exists-then-update-if -not-insert/ Es ist zu ausführlich von einem Muster ... – SparK

+0

versuchte es, aber kann nicht scheinen, es zu arbeiten – Christian

Antwort

9

Zuerst müssen Sie überprüfen, ob der Benutzer oder die Daten beendet ist oder nicht. dann können Sie das Update durchführen und den Vorgang einfügen.

$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); 
    } 

Es gibt eine weitere Möglichkeit, durch mysql query

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

Erklärung Angenommen dies die Tabelle verwendet wird.

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

wir jetzt durchführen ON DUPLICATE KEY UPDATE

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

Ergebnis ist

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

Example wurde in die Tabelle eingefügt worden, weil es mit dem Schlüssel id keinen Eintrag wird nun, wenn wir versuchen, Daten auf die Position 1 oder 2 dann

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

Dann Ergebnis ist

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

Weitere information

+0

bin ich nicht sehr vertraut mit der zweiten Option können Sie mehr erklären? Ich habe bereits den Link gelesen, den Sie gegeben haben, aber es verwirrt mich, die erste Option funktioniert nicht für mich – Christian

+0

@Christian: Überprüfen Sie die aktualisierte Antwort. – urfusion

+0

oh ich sehe, aber ich brauche irgendwie Hilfe bei der Umsetzung dieser ich versuchte es zu verwenden, aber es funktioniert nicht so mache ich nur die Abfrage, oder ich brauche etwas anderes Beispiel das ist meine Tabelle $ query = 'INSERT INTO product_category (ID, Kategorie) VALUES (?,?) ON DUPLICATE KEY UPDATE Kategorie = WERTE (Kategorie) '; ist es genau so? – Christian

Verwandte Themen