2014-01-10 6 views
2

Я работаю в рамках CodeIgniter, и я попытался применить все другие решения, которые я нашел в стеке, но я не мог заставить его работать, поэтому вот моя проблема ... Я пытаюсь получить запись из таблицы базы данных MySQL, которая называется «вопросы» на основе сегмента uri. Затем я пытаюсь отобразить эту запись в представлении. Насколько я могу судить, сегмент uri передается везде, где он должен быть, и запись извлекается из базы данных. Проблема возникает, когда я пытаюсь получить доступ к данным с контроллера, на мой взгляд. Ошибка я получаю для каждого эхо в моей петли в «view_thread_view» являетсяОшибка PHP: попытка получить свойство не-объекта

A PHP Error was encountered

Severity: Notice

Message: Trying to get property of non-object

Filename: views/view_thread_view.php

Любые решения будут весьма благодарны.

Вот мой код:

контроллер резьбы

function view_thread() 
    { 
     $quest = $this->uri->segment(3); 
     echo $quest;// for checking if uri segment is passed 

     if($query = $this->data_model->get_thread($quest)) 
     { 
      $data['records'] = $query;  
     } 

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

Модель data_model

public function get_thread($quest) 
    { 
    if($q = $this->db->get_where('questions' , 'qid' , $quest)); 
    { 
     return $q; 
    } 
    } 

Посмотреть view_thread_view

<div title="question_view"> 
    <h1>Question View<h1> 
     <?php foreach($records as $data) : ?> 
     <div> 
      <h2>Title</h2> 
      <?php 
      echo $data->title; 
      ?> 
     </div> 
     <div> 
      <h2>Question</h2> 
      <?php 
      echo $data->contents 
      ?> 
     </div> 
     <div> 
      <h2>Tags</h2> 
      <?php 
      echo $data->tags 
      ?> 
     </div> 
     <div> 
      Thread owner 
      <?php 
      echo $records->uname 
      ?> 
     </div> 
    <?php endforeach; ?> 
</div> 

EDIT: ВОПРОС ОТВЕТИЛ

Благодаря Girish Jangid исправили проблему это рабочий код:

Контроллер

function view_thread() 
    { 
     $quest = $this->uri->segment(3); 
     echo $quest;// for checking if uri segment is passed 
     //$data = array(); 
     if($query = $this->data_model->get_thread($quest)) 
     { 
      $data['records'] = $query;  
     } 

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

Модель

public function get_thread($quest) 
    { 
    if($q = $this->db->get_where('questions' , array('qid' => $quest))); 
    { 
     return $q; 
    } 

    } 

Посмотреть

<div title="question_view"> 
    <h1>Question View<h1> 

     <?php foreach($records->result() as $data) : ?> 
     <div> 
      <h2>Title</h2> 
      <?php 
      echo $data->title; 
      ?> 
     </div> 
     <div> 
      <h2>Question</h2> 
      <?php 
      echo $data->contents 
      ?> 
     </div> 
     <div> 
      <h2>Tags</h2> 
      <?php 
      echo $data->tags 
      ?> 
     </div> 
     <div> 
      Thread owner 
      <?php 
      echo $data->uname 
      ?> 
     </div> 
    <?php endforeach; ?> 

</div> 
</div> 
+0

Что это такое? $ this-> data_model-> get_thread ($ quest) – jcorry

+0

Теперь, когда код работает, он возвращает запись из базы данных, где «qid» соответствует $ quest. И $ квест содержит Uri сегмент (3) – Tom

ответ

3

Вы должны функция пользователя БД, чтобы получить результаты, пожалуйста, используйте CodeIgniter DB Результаты запроса функции, как этот

if($records->num_rows() > 0){ 
     foreach($records->result() as $data){ 
     if(isset($data->title)) echo $data->title; 
     } 
    } 

Более подробно читайте функцию Результат CodeIgniter Query Query Results

Код:

<div title="question_view"> 
    <h1>Question View<h1> 
     <?php if($records->num_rows() > 0) { ?> 
     <?php foreach($records->result() as $data) : ?> 
     <div> 
      <h2>Title</h2> 
      <?php 
      echo $data->title; 
      ?> 
     </div> 
     <div> 
      <h2>Question</h2> 
      <?php 
      echo $data->contents 
      ?> 
     </div> 
     <div> 
      <h2>Tags</h2> 
      <?php 
      echo $data->tags 
      ?> 
     </div> 
     <div> 
      Thread owner 
      <?php 
      echo $records->uname 
      ?> 
     </div> 
    <?php endforeach; ?> 
    <?php } ?> 
</div> 
+0

Вам не нужно использовать функции Active Record, вы можете выполнять необработанные запросы , что в большинстве случаев немного быстрее, чем использование ActiveRecord. –

+1

Вы правы, но он не использовал функцию результата для извлечения записей. – Girish

+0

Это действительно работает, спасибо. Однако есть проблема с моим db-запросом ... он не должен возвращать результаты, поскольку в представлении ничего не отображается. есть идеи? – Tom

-1

$records является массив, а не объект, поэтому вы не можете сделать $records->uname. Вероятно, вы имели в виду $data.

Редактировать: При втором взгляде, появляется $data - это массив! Доступ к массивам осуществляется через ['key'] не ->key

Кроме того, ваш код намного сложнее.

<?php 
foreach($records as $data){ 
    $string = <<<STR 
    <div> 
     <h2>Title</h2> 
     {$data['title']} 
    </div> 
    ...etc 
STR; 
    echo $string; 
} 

http://www.php.net/manual/en/language.types.string.php

+0

Thx для быстрого ответа, сделал корректировку кода и у меня есть новая ошибка PHP-ошибка была обнаружена Серьезность: Обратите внимание Сообщение: Undefined индекс: название Имя файла: Вид/view_thread_view.php – Tom

+0

Какая у вас ошибка? –

+0

Попробуйте выполнить 'var_dump ($ data);' в вашем цикле foreach и опубликовать результаты в вашем вопросе. –

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