Friday, 15 February 2013

php - Codeigniter: Pagination Trying to get property of non-object error -



php - Codeigniter: Pagination Trying to get property of non-object error -

in pagination getting error when seek go pages first page (offset=0) here code

uri: http://localhost/the-site/admin/hr/career_new/

uri offset: http://localhost/the-site/admin/hr/career_new/employee_id/desc/3

error1

a php error encountered severity: notice message: undefined offset: 0 filename: .../career_model.php line number: 127

error2

a php error encountered severity: notice message: trying property of non-object filename: .../career_model.php line number: 127

the error line have commented this error line #127 in below model code. right before return $ret

model

public function sort($limit, $offset, $sort_by, $sort_order) { $type = $this->input->post('type'); $emp_id = $this->input->post('employee_id'); $old_operation = $this->input->post('old_operation'); $old_position = $this->input->post('old_position'); $new_operation = $this->input->post('new_operation'); $new_position = $this->input->post('new_position'); $created = $this->input->post('record_date'); $effect = $this->input->post('effective_date'); $sort_order = ($sort_order == 'desc') ? 'desc' : 'asc'; $sort_columns = array( 'type', 'employee_id', 'old_operation', 'old_position', 'new_operation', 'new_position', 'record_date', 'effective_date', 'reason', ); $sort_by = (in_array($sort_by, $sort_columns)) ? $sort_by : 'id'; // results query $q = $this->db ->select('*') ->from('career_path') ->like('type', $type) ->like('employee_id', $emp_id) ->like('old_operation', $old_operation) ->like('old_position', $old_position) ->like('new_operation', $new_operation) ->like('new_position', $new_position) ->like('record_date', $created) ->like('effective_date', $effect) ->limit($limit, $offset) ->order_by($sort_by, $sort_order); $ret['rows'] = $q->get()->result(); // count query $q = $this->db ->select('count(*) count', false) ->from('career_path') ->like('type', $type) ->like('employee_id', $emp_id) ->like('old_operation', $old_operation) ->like('old_position', $old_position) ->like('new_operation', $new_operation) ->like('new_position', $new_position) ->like('record_date', $created) ->like('effective_date', $effect) ->limit($limit, $offset) ->order_by($sort_by, $sort_order); $temp = $q->get()->result(); $ret['num_rows'] = $temp[0]->count; // error line #127 homecoming $ret; }

controller

public function career_new($sort_by = 'employee_id', $sort_order = 'desc', $offset = 0) { $this->data['title'] = '<i class="fa fa-briefcase"></i> ' . lang('crr_add'); /* * *********************************************************** * load loop pagination * ****************************************************************** */ $limit = get_option('per_page'); // fields $this->data['columns'] = array( 'id' => 'id', 'type' => 'type', 'employee_id' => 'employee id', 'old_operation' => 'old operation', 'old_position' => 'old position', 'new_operation' => 'new operation', 'new_position' => 'new position', 'record_date' => 'created', 'effective_date' => 'effected', ); $results = $this->career_model->sort($limit, $offset, $sort_by, $sort_order); $this->data['careers'] = $results['rows']; $this->data['num_results'] = $results['num_rows']; $base_url = base_url() . 'admin/hr/career_new/' . $sort_by . '/' . $sort_order; //$numbs = $this->employees_model->filter_count(); $total_rows = $this->data['num_results']; get_pagination($base_url, $total_rows, $limit, 6, 2, true); //$this->pagination->initialize($config); $this->data['pagination'] = $this->pagination->create_links(); $this->data['sort_by'] = $sort_by; $this->data['sort_order'] = $sort_order; /* * *********************************************************** * end: load loop pagination * ****************************************************************** */ $this->data['career'] = $this->career_model->get_new(); $rules = $this->career_model->rules; $this->form_validation->set_rules($rules); if ($this->form_validation->run() == true) { //db fields/columns insert value $crr_fields = array( 'type', 'employee_id', 'old_operation', 'old_position', 'new_operation', 'new_position', 'record_date', 'effective_date', 'reason', ); $data = $this->career_model->array_from_post($crr_fields); if (empty($data['reason'])) { $data['reason'] = null; } $this->career_model->save($data); $data['old_position'] = get_employee_id_field($data['employee_id'], 'position'); $data['old_operation'] = get_employee_id_field($data['employee_id'], 'operation'); /* ---------------------------------------------------------------- * sending email 1 time form validation runs true --------------------------------------------------------------- */ $email_hr = $this->config->item('hr_email_templates'); $email_template = $this->config->item('crr_new_email'); $message = $this->load->view($email_hr . $email_template, $data, true); $this->email->clear(); $this->email->from('atlassystem@apolloblake.com', get_config_option('site_name')); $this->email->to(get_user_data('email', 1)); $this->email->subject(get_config_option('site_name') . ' - ' . $this->lang->line('crr_new_subject')); $this->email->message($message); if ($this->email->send()) { // set session notification message $this->session->set_flashdata('message', sprintf(lang('crr_record_added'), '#' . $data['employee_id'])); $this->data['message'] = $this->session->flashdata('message'); $this->session->set_flashdata('message_type', 'success'); $this->data['message_type'] = $this->session->flashdata('message_type'); redirect(current_url(), 'refresh'); } else { $this->load->view('hr/career/form', $this->data); } } $this->load->view('hr/career/form', $this->data); }

view

<div class="panel-body"> <?php if (validation_errors()): echo show_alert(validation_errors(), true, 'danger', 'glyphicon glyphicon-warning-sign'); endif; ?> <div class="table-responsive"> <table cellpadding = "0" cellspacing = "0" border = "0" class = "table table-hover table-bordered datatables center" id = ""> <thead> <tr class = "active center"> <?php foreach ($columns $field_name => $field_display): ?> <th <?= ($sort_by == $field_name ) ? "class=\"sort_$sort_order\"" : null ?>> <?= anchor("admin/hr/career_new/$field_name/" . (($sort_order == 'asc' && $sort_by == $field_name) ? 'desc' : 'asc'), $field_display); ?> <?= (($sort_order == 'asc' && $sort_by == $field_name) ? '<span class="glyphicon glyphicon-sort-by-attributes"></span>' : '<span class="glyphicon glyphicon-sort-by-attributes-alt"></span>'); ?> </th> <?php endforeach; ?> </tr> </thead> <tbody> <?php foreach ($careers $crr): echo '<tr>'; foreach ($columns $field_name => $field_display): echo '<td>', $crr->$field_name, '</td>'; endforeach; echo '</tr>'; endforeach; ?> </tbody> </table><!--end table--> </div> <?php if (strlen($pagination)): ?> <div> <?= $pagination; ?> </div> <?php endif; ?> </div>

var_dump output

using var_dump($temp); in model getting below on $offset=0 means first page

array (size=1) 0 => object(stdclass)[37] public 'count' => string '7' (length=1)

and var_dump($ret['num_rows']);

tring '7' (length=1)

on sec page offset=3 getting error below var_dump output

var_dump($temp); array (size=0) empty

and

var_dump($ret['num_rows']); null

okay have fixed issue. little , simple yet took 4-5 hours find , prepare it.

i did re-create , paste result , count query in model , there made mistake. overlooked lastly 2 ->limit(), , ->order_by() function not required count total rows. creating issue. when utilize pagination counting limit , offset. final fixed code below

model

public function sort($limit, $offset, $sort_by, $sort_order) { $type = $this->input->post('type'); $emp_id = $this->input->post('employee_id'); $old_operation = $this->input->post('old_operation'); $old_position = $this->input->post('old_position'); $new_operation = $this->input->post('new_operation'); $new_position = $this->input->post('new_position'); $created = $this->input->post('record_date'); $effect = $this->input->post('effective_date'); $sort_order = ($sort_order == 'desc') ? 'desc' : 'asc'; $sort_columns = array( 'type', 'employee_id', 'old_operation', 'old_position', 'new_operation', 'new_position', 'record_date', 'effective_date', 'reason', ); $sort_by = (in_array($sort_by, $sort_columns)) ? $sort_by : 'id'; // results query $q = $this->db ->select('*') ->from('career_path') ->like('type', $type) ->like('employee_id', $emp_id) ->like('old_operation', $old_operation) ->like('old_position', $old_position) ->like('new_operation', $new_operation) ->like('new_position', $new_position) ->like('record_date', $created) ->like('effective_date', $effect) ->limit($limit, $offset) ->order_by($sort_by, $sort_order); $ret['rows'] = $q->get()->result(); // count query $q = $this->db ->select('count(*) count', false) ->from('career_path') ->like('type', $type) ->like('employee_id', $emp_id) ->like('old_operation', $old_operation) ->like('old_position', $old_position) ->like('new_operation', $new_operation) ->like('new_position', $new_position) ->like('record_date', $created) ->like('effective_date', $effect); // removed limit , order_by $temp = $q->get()->result(); $ret['num_rows'] = $temp[0]->count; // error line #127 homecoming $ret; }

php codeigniter pagination

No comments:

Post a Comment