2013-09-25 4 views
2

Привет, я пытался получить записи из моей базы данных, но я продолжаю получать эту ошибку «Тяжесть: предупреждение: незаконное смещение строки» в нескольких полях.Недопустимое смещение строки codeigniter

Вот мой контроллер view_logs.php

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class View_Logs extends CI_Controller { 

function View_Logs() 
{ 
    parent::__construct(); 
} 

function Logs(){ 
    $id = $this->uri->segment(3); 

    $this->load->model('log_listmodel'); 
    $this->log_listmodel->log_list_get($id);  
} 
} 
?> 

Вот моя модель log_listmodel.php

<?php 
class Log_Listmodel extends CI_Model{ 

    function Log_Listmodel() 
    { 
     parent::__construct(); 
    } 

    function log_list_get($id){ 
    $query = $this->db->get_where('test_request_log', array('test_request_id' => $id)); 
    //return $query->result(); 
    $results=$query->result_array(); 


    $data['query']=$results[0]; 
    $this->load->view('logs_list_view',$data); 
    } 
} 
?> 

Вот мой вид страницы log_list_view.php

<table class="list_header" bgcolor="#ffffff" border="0" width="1020px" cellpadding="4px"> 

      <?php foreach($query as $row): ?> 
      <tr> 
       <td><b>Updated</b></td> 
       <td><?php echo $row['id'];?>.</td> 
       <td><?php echo $row['new_testing_reason'];?></td> 
       <td><?php echo $row['new_applicant_name'];?></td> 
       <td><?php echo $row['new_authorizer_name'];?></td> 
       <td><?php echo $row['new_received_by'];?></td> 
       <td><?php echo $row['new_test_required'];?></td> 
       <td><?php echo $row['new_laboratory_number'];?></td> 
       <td><?php echo $row['log_date'];?></td> 
       <td><?php echo $row['who'];?></td> 
      </tr> 
      <?php endforeach; ?> 
     </table> 
+1

где вы получаете ошибку? –

+0

Ничего общего с проблемой, но ваша структура MVC немного испорчена. Вы действительно должны называть свое мнение в контроллере. ** Проблема **: вы возвращаете только одну строку из своей базы данных, а затем просматриваете столбцы строк в своем представлении с помощью 'foreach'. Либо удалите foreach и получите доступ к данным типа '$ query ['id']', либо в вашей модели задайте данные как '$ data ['query'] = $ results'. – Jeemusu

+0

var_dump ($ row), чтобы увидеть, что это (должен быть массив с теми индексами, которые вы пытаетесь получить) –

ответ

4

Вы установили $data['query'] в первой строке вашего результата, но с точки зрения вы используете его, как он будет иметь весь набор данных.

Так что вам нужно изменить

$data['query']=$results[0]; 

к

$data['query']=$results; 

или

$data['query']=$query->result_array(); 
+0

Отлично! хорошо работает сейчас –

0

Ваш код вид unproperly структуры, я просто реконструирую его и сделаю его простым. Надеюсь, что это сработает.

Сначала загрузите свою базу данных lib.

Перейти кприложение/Config/autoload.php найти эту строку затем библиотеку базы данных автозагрузку

/* 
| ------------------------------------------------------------------- 
| Auto-load Libraries 
| ------------------------------------------------------------------- 
| These are the classes located in the system/libraries folder 
| or in your application/libraries folder. 
| 
| Prototype: 
| 
| $autoload['libraries'] = array('database', 'session', 'xmlrpc'); 
*/ 

$autoload['libraries'] = array('database'); 

контроллер Просмотр

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class View_Logs extends CI_Controller { 

function View_Logs() 
{ 
    parent::__construct(); 
    $this->load->library('database'); // if you didn`t load 'database' in your autoload.php 
    $this->load->model('log_listmodel'); 
} 

function Logs(){ 
    $id = $this->uri->segment(3); 


    $data['query'] = $this->log_listmodel->log_list_get($id)->result(); 

    $this->load->view('logs_list_view',$data); 
} 
?> 

Model View

<?php 
class Log_Listmodel extends CI_Model{ 

    function Log_Listmodel() 
    { 
     parent::__construct(); 
    } 

    function log_list_get($id){ 
     return $this->db->get_where('test_request_log', array('test_request_id' => $id)); 

    } 
} 
?> 

Реж.просм

<table class="list_header" bgcolor="#ffffff" border="0" width="1020px" cellpadding="4px"> 

      <?php foreach($query as $row): ?> 
      <tr> 
       <td><b>Updated</b></td> 
       <td><?php echo $row->id;?>.</td> 
       <td><?php echo $row->new_testing_reason;?></td> 
       <td><?php echo $row->new_applicant_name;?></td> 
       <td><?php echo $row->new_authorizer_name;?></td> 
       <td><?php echo $row->new_received_by;?></td> 
       <td><?php echo $row->new_test_required;?></td> 
       <td><?php echo $row->new_laboratory_number;?></td> 
       <td><?php echo $row->log_date;?></td> 
       <td><?php echo $row->who;?></td> 
      </tr> 
      <?php endforeach; ?> 
</table> 
+0

'result()' возвращает весь набор результатов как объект, вы получите ошибку преобразования строки в массив 'в представлении. Кроме того, используйте '__construct()' вместо методов с тем же именем, что и класс, это php4 –

+0

@DamienPirsy спасибо за исправление забыл изменить загрузку результатов в качестве объекта. –

+0

@Kaii попробовал ваш метод, но он дал мне еще одну ошибку. Неустранимая ошибка: «Вызовите функцию-член log_list_get() на не-объект« –

Смежные вопросы