2017-08-26 5 views
0

に変換し、ブラウザはメッセージTrying to get property of non-objectを出力します。 コントローラ内部PHPのエラー:配列オブジェクトは、私がレコードを編集し、データが<em>無効</em>あるときはいつでも、私だけではなく、検証エラーメッセージを表示するので、CodeIgniterの3</p> <p>を使用してCRUDアプリケーションを作っていた連想配列

私の更新機能は、次のようになります。

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_rules('phone', 'Phone number', 'required'); 
    $this->form_validation->set_rules('country', 'Country', 'required'); 
    $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'), 
     'phone' => $this->input->post('phone'), 
     'country' => $this->input->post('country'), 
     'city' => $this->input->post('city'), 
     'address' => $this->input->post('address') 
     ]; 
     $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'), 
      'phone' => $this->input->post('phone'), 
      'country' => $this->input->post('country'), 
      'city' => $this->input->post('city'), 
      'address' => $this->input->post('address'), 
     'id' => $customer_id 
    ]; 
    $this->load->view('update', ['customer' => $data]); 
} 
} 

を更新フォーム内のデータがエラーがない場合に有効です。フォームは、次のようになります。

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

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

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

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

      <div class="form-group"> 
       <?php echo form_input('city', set_value('city', $customer->city), [ 
        'id' => 'city', 
        'class' => 'form-control' 
        ]); 
       ?> 
      </div> 

      <div class="form-group"> 
       <?php echo form_input('address', set_value('city', $customer->address), [ 
        'id' => 'address', 
        'class' => 'form-control' 
        ]); 
       ?> 
      </div> 

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

<?php echo form_close(); ?> 

私は$customerを連想配列になっていると、このエラーメッセージの原因であると考えている:Trying to get property of non-object。しかし、この変換の原因は何ですか?それとも、問題の原因がまったく違うのですか?

答えて

0

But what is causing this conversion?

何も配置されていないと、オブジェクトのようにアクセスしようとする配列が返されます。

例では、$dataは配列ですが、ビューではオブジェクトのようにアクセスしています。

あなたが本当にオブジェクトのようにアクセスしたい場合は、オブジェクトへの配列をキャスト:

$this->load->view('update', ['customer' => (object)$data]); 
+0

甘いです!上記のコードを最適化する可能性はありますか? –

+0

正確に最適化するものは何ですか?実際には単純な形式なので、ビューで変数をエコーするときに注意してください。XSSの問題を避けるためにエンコードするようにしてください。 – Twisted1919

+0

CIは安全なものではありませんか? –

関連する問題

 関連する問題