2010-04-05 2 views
1

Я пытаюсь написать сайт с CodeIgniter, но у меня проблема с PHP. Я уверен, что это так просто и не может быть ошибкой. Но я не знаю ошибок из, просто новичок в CodeIgniter :)PHP - CodeIgniter - Недопустимый аргумент для foreach()

<html> 
    <head> 
     <title><?=$page_title?></title> 
    </head> 
    <body> 
     <?php foreach($result as $row):?> 
     <h3><? echo $row->title; ?></h3> 
     <p><? echo $row->text; ?></p> 
     <?php endforeach;?> 
    </body> 
</html> 

Я ошибка из этого файла:

PHP-ошибка была обнаружена

Серьезность: Предупреждение

Сообщение: Недействительный аргумент для Еогеасп()

Имя файла: вид/hellowor ld_view.php

Номер строки: 6

заранее спасибо за чтение этого :)

ответ

2

Переменные вы поставляете к петле Еогеаспа должен быть массивом. Вы можете пропустить foreach, если значение предоставленной переменной не является массивом с приведенным ниже решением.

<?php if(is_array($result)): ?> 
<?php foreach($result as $row):?> 
<h3><? echo $row->title; ?></h3> 
<p><? echo $row->text; ?></p> 
<?php endforeach;?> 
<?php endif; ?> 
+2

Это остановит ошибку, но это не поможет ему понять, что происходит. Алекс Лоуфорд сделал все возможное, либо он пытается использовать объект базы данных, либо у него есть ЛОЖЬ из его модели где-то. –

2

$ результата не массив.

Постарайтесь проверить это с помощью is_array до foreach.

И отлаживать почему $ результата не массив: P

5

foreach($result->result() as $row) Попробуйте - это может быть вы пытаетесь перебирать объект, возвращенный активной записью CodeIgniter в.

3

Если вам интересно, что может быть в переменной, выведите его!

var_dump($result); 

Это немедленно сообщит вам, что происходит. Я предполагаю, что вы вернули FALSE из вашей модели или используете объект DB, а не result() или result_array() (как было предложено Алексом).

2

Вы можете используйте функцию empty php и сделайте что-нибудь вроде

<? 
    if(!empty($results)){ 
     echo " 
     foreach($result as $row){ 
     <h3>".$row->title."</h3> 
     <p>".$row->text".</p> 
      "; 
     } 
    }else{ 
     echo "<p>no results<p/>"; 
    } 
?> 
0

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

На странице контроллера, он должен выглядеть примерно так:

// you need to put some data here for checking the number of results returned 

if($numberOfRows > 0){ 
$data['result'] = $this->Yourmodel->methodName($arguments); 

$this->load->view('yourView'); 
} 

else{ 
$this->load->view('yourCustomMissingOrErrorView'); 
} 

На странице просмотра должно быть

<?php 

// note if you are just intitialiizing variables, remove the echo statements and put it  before all of your html. if you are looping for output then put it where it needs to go in the html 

foreach($result as $value){ 
$title = $this->value->title; // just makes it easier to use if you need to use elsewhere 
$text = $this->value->text; // just makes it easier to use if you need to use elsewhere 

echo "<h3>" . $title . "</h3>"; 
echo "<p>" . $text . "</p>"; 
} 
?> 
0

Вам нужно определить $ данных [ «результат»] в контроллере

//Controller File 
function yourControllerMethod() 
{ 
    $this->main(); 
    $this->load->model('yourModel'); 
    $data['result'] = $this->yourModel->getResultMethod(); 
    $this->load->view('yourView',$data); 
} 

//Model File 
function getResultMethod() 
{ 
    $this->db->from($this->yourTable); 
    $query = $this->db->get(); 
    $rows = $query->result(); 
    return $rows; 
} 
0

Чувак, Эта ошибка «Неверный аргумент, предоставленный для foreach()» в основном происходит. Когда вы передаете ассоциативный массив для foreach, это null. Осторожно проверьте свой ассоциативный массив, используя инструкцию echo. Не передавать нулевой ассоциативный массив в цикл foreach.

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