PHP - CodeIgniter - неверный аргумент для foreach () - PullRequest
2 голосов
/ 05 апреля 2010

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

    <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

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

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

Имя файла: views / helloworld_view.php

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

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

Ответы [ 11 ]

5 голосов
/ 07 апреля 2010

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

3 голосов
/ 07 апреля 2010

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

var_dump($result);

Это мгновенно скажет вам, что происходит. Полагаю, вы вернули FALSE где-то из вашей модели, или вы используете объект БД, а не result () или result_array () (как предложено Alex).

3 голосов
/ 05 апреля 2010

Переменная, которую вы передаете в цикл foreach, должна быть массивом. Вы можете пропустить 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 голосов
/ 19 мая 2012

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

<?
    if(!empty($results)){
      echo "
      foreach($result as $row){
       <h3>".$row->title."</h3>  
       <p>".$row->text".</p>
           "; 
      }
    }else{
       echo "<p>no results<p/>";
    }
?>
2 голосов
/ 05 апреля 2010

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

Попробуйте проверить это с is_array до foreach.

И отладка, почему $ result не является массивом: P

0 голосов
/ 17 января 2019

Это может помочь

function query($query){
    global $conn;
    $result = mysqli_query($conn, $query);
    $rows = [];
    while($row = mysqli_fetch_assoc($result) ) {
        $rows[] = $row;
    }
    return $rows;<<<< check again
}
0 голосов
/ 23 июня 2018

Данные вашего db->result_array или что resutl() объект в возможно $result массив Ваш $result['text']; в поле зрения если не. $result это объект массива, который вы должны попробовать print_r или var_dump $result в контроллере


0 голосов
/ 22 декабря 2014

Чувак, эта ошибка "Недопустимый аргумент, указанный для foreach ()", чаще всего возникает.Когда вы передаете ассоциативный массив foreach, он равен нулю.Тщательно проверьте ваш ассоциативный массив с помощью оператора echo.Не передавайте нулевой ассоциативный массив в цикл foreach.

0 голосов
/ 12 ноября 2014

Вам необходимо определить $ data ['result'] в контроллере

//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 голосов
/ 21 июля 2012

Во-первых, вам нужно убедиться, что массив данных, который вы передаете в ваше представление, действительно называется $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>";  
}
?>
...