2016-10-26 1 views
0

Ich bin ein Neuling bei CakePHP. Ich habe ein Formular mit 5 Eingaben erhalten. Mein Formular sollte in der Lage sein, entweder eine Benutzereingabe oder alle 5 Eingaben zu speichern. Ich kann speichern, wenn der Benutzer alle 5 Eingaben füllt, wenn der Benutzer nur 1 oder 2 füllt und speichert. Leerstellen mit erstelltem Datum (aktuelles Datum) werden in der Datenbank gespeichert. Wie kann ich es machen, nur die Benutzereingaben vom Formular ohne irgendwelche leeren Felder in der Datenbank zu speichern. Meine Add-Funktion unten.CakePHP mehrere Eingabefelder

public function add() {

if ($this->request->is('post')) { 
     $this->Item->create(); 

    for ($i=0;$i<5;$i++){ 
    if(empty($this->request->data['Item'][$i]['name'])){ 

    }else{ 


     $name = $this->request->data['Item'][$i]['name']; 
     $explode_name = explode(":",$name); 
     $this->request->data['Item'][$i]['name'] = $explode_name[0]; 
     $this->request->data['Item'][$i]['hrid'] = $explode_name[1]; 
    } 
} 


    if ($this->Item->saveAll($this->request->data['Item'])) { 
     $this->Session->setFlash(__('The Item has been saved')); 
     $this->redirect(array('action' => 'index')); 
    } else { 
     $this->Session->setFlash(__('The item could not be saved. Please, try again.')); 
    } 

    } 
    $itemTypes = $this->Item->ItemType->find('list',array('order' =>array('ItemType.name' => 'asc'))); 
    $this->set(compact('itemTypes')); 
} 
+0

können Sie die zeigen, Debug-Ergebnis von $ this-> request-> data; oder halten Sie einfach die Funktionalität in einem anderen Teil Ihres Codes! –

Antwort

0

Es gibt eine kleine Sache, die Sie vermissen, und es ist, dass, ob Name leer ist oder nicht, aber es hat einen Wert für diesen bestimmten Index gesetzt. Sie sollten das deaktivieren, wenn der Wert wie unten leer ist

public function add() { 

    if ($this->request->is('post')) { 
     $this->Item->create(); 

     for ($i=0;$i<5;$i++){ 
      if(empty($this->request->data['Item'][$i]['name'])){ 
       // here we are removing the empty name index so that it does not saves the result 
       unset($this->request->data['Item'][$i]); 
      }else{ 


       $name = $this->request->data['Item'][$i]['name']; 
       $explode_name = explode(":",$name); 
       $this->request->data['Item'][$i]['name'] = $explode_name[0]; 
       $this->request->data['Item'][$i]['hrid'] = $explode_name[1]; 
      } 
     } 

     // also here we should check here that atleast there is one entry 
     if(!empty($this->request->data['Item'])){ 
      if ($this->Item->saveAll($this->request->data['Item'])) { 
       $this->Session->setFlash(__('The Item has been saved')); 
       $this->redirect(array('action' => 'index')); 
      } else { 
       $this->Session->setFlash(__('The item could not be saved. Please, try again.')); 
      } 
     } else { 
       $this->Session->setFlash(__('There is no such item. Please fill value for at least one item.')); 
     } 
    } 
    $itemTypes = $this->Item->ItemType->find('list',array('order' =>array('ItemType.name' => 'asc'))); 
    $this->set(compact('itemTypes')); 
} 

Bitte versuchen Sie den obigen Code.

0

In CakePHP 2.x Sie können es tun, als wie unten-

public function add(){ 
    if ($this->request->is('post')) { 
    $this->Item->create(); 
    $items = $this->request->data['Item']; /*Get all items Array*/ 
    $items = array_filter(array_map('array_filter', $items)); /*Remove all empty array, only keep Array with user inputs*/ 
    if ($this->Item->saveAll($items)) { 
    /*Success*/ 
    } else { 
    /*Error*/ 
    } 
} 

}

In CakePHP 3.x Sie es als wie tun unten-

public function add() { 
    if ($this->request->is('post')) { 
    $items = $this->request->data['Item']; /*Get all items Array*/ 
    $items = array_filter(array_map('array_filter', $items)); /*Remove all empty array, only keep Array with user inputs*/ 
    $entities = $this->Item->newEntities($items); /*Prepare all Data*/ 
    if($this->Item->saveMany($entities)){ /*Save all data*/ 
     /*Success*/ 
    }else{ 
     /*Error*/ 
    } 
    } 
} 
Verwandte Themen