#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;
}
}
надеюсь, это поможет