Неопределенная переменная и недопустимый аргумент, предоставленные для foreach()

#php #html #codeigniter

#php #HTML #codeigniter

Вопрос:

я пытаюсь учиться codeigniter , и у меня здесь проблема. При просмотре была ошибка неопределенной переменной и недопустимого аргумента, предоставленного для foreach(). вот код :

Модель (Model_Users.php ) :

 class Model_users extends CI_Model {

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

    function getFirstNames(){
        $query = $this->db->query('SELECT firstname FROM users');

        if($query->num_rows() > 0) {
            return $query->result();
        } else {
            return NULL;
        }
    }

    function getUsers(){

        $query = $this->db->query('SELECT * FROM users');

        if ($query->num_rows() > 0) {
            return $query->result();
        } else {
            return NULL;
        }
    }
}
  

Контроллер (welcome.php ) :

 class Welcome extends CI_Controller {

    public function index()
    {
        $this->home();
    }

    public function home()
    {
        $this->load->model('model_users');

        $data['title'] = 'MVC Cool Title';
        $data['page_header']='Intro to MVC Design';
        $data['firstnames'] = $this->model_users->getFirstNames();

        $data['users'] = $this->model_users->getUsers();

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

Просмотр (Welcome_message.php ) :

 <div id="container">
    <h1><?php echo $page_header ?></h1>

    <div id="body">
        <?php
            foreach ($firstnames as $object) {
                echo $object->firstname .'<br/>';
            }
            echo '<br/><hr/><br/>';

            foreach ($users as $object){
                echo $object->firstname . ''s email address is'. $object->email . '<br/>';
            }
        ?>
    </div>

    <p class="footer">Page rendered in <strong>{elapsed_time}</strong> seconds</p>
</div>
  

Пожалуйста, помогите мне, что не так с моим кодом?

Комментарии:

1. какое это значение $firstnames или $users оба заданы? Я думаю, что, по крайней мере, один отсутствует. поместите var_dump($firstnames); и var_dump($users); перед foreach .

2. вы уверены, что у вас есть данные в таблице? потому что, если вы этого не делаете, он возвращает значение NULL . и NULL является недопустимым аргументом для foreach .

3. Да, как отмечали другие … вы либо возвращаете массив, либо значение NULL, но вы не проверяете значение NULL. Так что это может быть хорошей идеей для проверки перед выполнением циклов foreach?

4. Просто в сторону. Я понимаю, что вы только начинаете и играете грандиозно… Но рассмотрим случай, когда вы выполняете запрос к таблице users, один для firstname, а затем один для всего. Не могли бы вы добиться этого одним вызовом таблицы users ?

Ответ №1:

Сначала проверьте, возвращает ли значение какое-либо значение или не записывает этот код при использовании контроллера

var_dump($firstnames) ; и var_dump($users) ;

Я думаю, что данные не возвращаются из модели, проверьте любые данные в таблице, спасибо

Ответ №2:

Вы можете устранить ошибку, используя return []; вместо return null; вместо проверки этого случая в каждом вызове foreach , потому что кажется, что ваша пользовательская таблица может быть пустой на основе предоставленного кода.

Ответ №3:

Измените свои функции модели, как показано ниже

 function getFirstNames(){
    $query = $this->db->get('users')->row()->firstname;

    if($query->num_rows() > 0) {
        return $query->result_array();
    } else {
        return NULL;
    }
}

function getUsers(){


    $query = $this->db->get('users');
    if ($query->num_rows() > 0) {
        return $query->result_array();
    } else {
        return NULL;
    }
}
  

надеюсь, это поможет