2017-08-20 1 views
-1

ich zusammen eine CRUD Anwendung mit Codeigniter gesetzt habe 3. Das Update-Formular Datenvalidierung wird eingerichtet, durch die Steuerung:Codeigniter CRUD App: Fehler einen Datensatz zu aktualisieren (versucht Eigenschaft von nicht-Objekt zu erhalten)

UPDATE Funktion:

public function update($customer_id) { 
     // data validation 
     $this->form_validation->set_rules('first_name', 'First name', 'required'); 
     $this->form_validation->set_rules('last_name', 'Last name', 'required'); 
     $this->form_validation->set_rules('email', 'Email address', 'required|valid_email'); 
     $this->form_validation->set_error_delimiters('<p class="error">', '</p>'); 

     if ($this->form_validation->run()) { 
      $data = [ 
      // insert into these database table fields 
      'first_name' => $this->input->post('first_name'), 
      'last_name' => $this->input->post('last_name'), 
      'email' => $this->input->post('email') 
      ]; 
      $this->load->model('Customer'); 
      if ($this->Customer->updateCustomer($customer_id, $data)) { 
       $this->session->set_flashdata('update-response','Customer successfully updated'); 
      } else { 
       $this->session->set_flashdata('update-response','Failed to update customer'); 
      } 
      redirect('home'); 
     } else { 
     $data = [  
      'first_name' => $this->input->post('first_name'), 
      'last_name' => $this->input->post('last_name'), 
      'email' => $this->input->post('email'), 
      'id' => $customer_id 
     ]; 
     $this->load->view('update', array("customer" => $data)); 
    } 
} 

Es tut durch die, wenn zu gehen, aber nicht durch das andere.

UPDATE Form:

<?php echo form_open("home/update/{$customer->id}"); ?> 

    <div class="form-group <?php if(form_error('first_name')) echo 'has-error';?>"> 
     <?php echo form_input('first_name', set_value('first_name', $customer->first_name),[ 
      'id' => 'first_name', 
      'class' => 'form-control' 
      ]); 
     if(form_error('first_name')) echo '<span class="glyphicon glyphicon-remove"></span>'; 
     echo form_error('first_name'); ?>          
    </div> 

    <div class="form-group"> 
     <?php echo form_submit('submit', 'Save', 'class = "btn btn-success btn-block"'); ?> 
    </div> 

<?php echo form_close(); ?> 

Das UPDATE Modell ist:

public function getAllCustomers($customer_id) { 
    $query = $this->db->get_where('customers', array('id' => $customer_id)); 
    if ($query->num_rows() > 0) { 
     return $query->row(); 
    } 
} 

public function updateCustomer($customer_id, $data) { 
    return $this->db->where('id', $customer_id)->update('customers', $data); 
} 

Die UPDATE Ansicht:

<?php echo form_open("home/update/{$customer->id}"); ?> 

Ther e ist dieses Problem mit einem Datensatz bearbeiten, ungültige Daten eingeben, dann die „Save-Button“ schlagen:

Severity: Notice 
Message: Trying to get property of non-object 
Filename: views/update.php 

Ein solches Problem erscheint nur auf der Update-Formular. Was könnte die Ursache dafür sein?

+0

http://www.codeigniter.com/user_guide/general/views.html#adding-dynamic- Data-to-the-view – user4419336

Antwort

0

in Ihrem sonst ersetzen mit diesem:

} else { 
     $data = [  
      'first_name' => $this->input->post('first_name'), 
      'last_name' => $this->input->post('last_name'), 
      'email' => $this->input->post('email'), 
      'id' => $customer_id 
     ]; 
     $this->load->view('update', array("customer" => $data)); 
    } 
+0

Der erste Fehler ist weg, Bit der zweite bleibt: 'Nachricht: Versuch, die Eigenschaft von Nicht-Objekt zu erhalten –

0

Sie haben keine Daten zu Ihrer Ansicht übergeben, so dass Sie warnen davor, immer

$this->load->view('update'); 

Um

$this->load->view('update', array('customer'=>$your_array)); 

Es wird so etwas wie dieses

$this->load->view('update',array(
       'customer'=>$this->Customer->updateCustomer($customer_id, $data) 
      ) 
); 
+0

Der _Create_ Teil hat kein Problem. Es ist das _Update_, das Fehler auslöst. –

+0

@RazvanZamfir leid Art, lassen Sie mich –

+0

@RazvanZamfir bearbeiten: im Grunde hast du keine Daten passieren zu sehen, so dass Sie wurden nicht definiert Warnung bekommen –

0

sein senden Bitte geben Sie die Daten in Ladeansicht wie .. zB

$data['customer'] = $this->Customer->updateCustomer($customer_id, $data); 

$this->load->view('update',$data); 

Und dann Daten wie $customer->id etc bekommen ..

Sie können keine Daten übergeben, deshalb wurde der Fehler

Der Versuch, Eigentum von Nicht-Objekt gezeigt

+0

Ich habe weitere Details zum Problem hinzugefügt. –

+0

Von welcher Methode erhalten Sie die Daten? –

+0

'$ this-> Kunde-> updateCustomer ($ customer_id, $ data)' ist die Aktualisierungsmethode $ customers = $ this-> Kunde-> getCustomers ($ limit, $ offset); listet alle Kunden auf, in Chunks von 10 –

0

zu erhalten Sie müssen $ customer object von Ihrer Update-Funktion in der Steuerung übergeben. So sollte Ihr anderer Teil aussehen wie-

$customer = $this->Customer->getCustomer($customer_id); 
$this->load->view('update',$customer); 
+0

Es gibt keine 'getCustomer ($ customer_id);' -Funktion. –

+0

Erstellen Sie eine solche Funktion, die die Daten des Kunden erhält. –

Verwandte Themen