为 foreach() 第 48 行提供的参数无效
Posted
技术标签:
【中文标题】为 foreach() 第 48 行提供的参数无效【英文标题】:Invalid argument supplied for foreach() line 48 【发布时间】:2017-03-05 03:12:51 【问题描述】:如何修复此错误消息:
遇到 php 错误 严重性:警告消息:无效 为 foreach() 提供的参数 文件名:views/editpages.php 行号:48
第 48 行:<?php foreach ($pages as $pages_item): ?>
views/editpages.php
<div class="row-fluid">
<div class="span12">
<?php foreach ($pages as $pages_item): ?>
<div class="widget-box">
<div class="widget-title"><h5>Pages</h5></div>
<div class="widget-content">
<?php echo form_open('cpages/editpagesupdate'); ?>
<table border="0" style="width: 100%; height: 90px;">
<tr>
<td>Pages Name</td>
<td><input type="text" name="pages_name" value="<?php echo $pages_item['pages_name']; ?>"></td>
</tr>
<tr>
<td>Create Date</td>
<td><input type="text" name="create_date" value="<?php echo $pages_item['create_date']; ?>"></td>
</tr>
<tr>
<td>Order</td>
<td><input type="text" name="pages_order" value="<?php echo $pages_item['pages_order']; ?>"></td>
</tr>
<tr>
<td>View Content</td>
<td><textarea rows="3" cols="20" name="pages_content"><?php echo $pages_item['pages_content']; ?></textarea></td>
</tr>
<tr>
<td></td>
<td><input type="submit" class="edit" name="submit" value="SUBMIT"></td>
</tr>
</table>
</div>
</div>
<?php endforeach; ?>
</div>
</div>
控制器/Cpages.php
public function editpages()
$data['pagessuccess'] = '';
$pages_id = $this->uri->segment(3);
$data['pages'] = $this->Mpages->call_point_pages($pages_id);
$this->load->view('editpages', $data);
模型/Mpages.php
public function call_point_pages($pages_id)
$this->db->where('pages_id', $pages_id);
$query = $this->db->get('pages');
//return $query->result_array();
return $query->result_array();
【问题讨论】:
根据你的 foreach 你得到 n 个表格和表格。但是所有表单操作都使用一种方法。检查你的代码是这个存档你的目的。例如:如果你在 foreach 中有 15 个数组,你会得到 15 个表格和 15 个表格。但是一个表单操作 URL。 Invalid argument supplied for foreach()的可能重复 @Davy .try 在 foreach 之前打印。 print_r($pages);出口;检查你得到什么数据 @Davy 我认为 $pages 没有数组数据 有几件事要检查...您是否有一个 segment(3) 值,如果没有会发生什么?您是否正在检查查询是否返回了有效结果,即 $data['pages'] 中的内容是数组还是其他内容?我暗示能够通过检查每个步骤的结果来调试这些东西,并能够处理你所期望的异常。 【参考方案1】:希望您已经根据此处发布的 cmets 和回复进行了调试并找出了问题..
这只是一个提示:
无论何时,您有一个应该返回数组的方法 - 您应该在该方法内有一个空数组声明。然后稍后将值/值分配给该数组。这样,您将始终能够在 foreach 循环中使用返回的值,而不必担心返回的值是否实际上是一个数组。
例如
public function call_point_pages($pages_id)
$pages = array();
$this->db->where('pages_id', $pages_id);
$query = $this->db->get('pages');
if ($query->num_rows() > 0)
foreach($query->result() as $row)
$page = object2array($row);
$pages[] = $page;
$query->free_result();
return $pages;
这看起来像很多代码,但它使我避免了运行时出现意外错误。
【讨论】:
【参考方案2】:控制器/cpages.php
public function editpages()
$data['pagessuccess'] = '';
$pages_id = $this->uri->segment(3);
$data['pages'] = $this->Mpages->call_point_pages($pages_id);
$this->load->view('editpages', $data);
模型/Mpages.php
public function call_point_pages($pages_id)
$this->db->where('pages_id', $pages_id);
$query = $this->db->get('pages');
return $query->result();
只会得到一个结果,因为有一个 where 条件,这似乎是一个主键
所以你的视图必须喜欢
<div class="row-fluid">
<div class="span12">
<div class="widget-box">
<div class="widget-title"><h5>Pages</h5></div>
<div class="widget-content">
<?php echo form_open('cpages/editpagesupdate'); ?>
<table border="0" style="width: 100%; height: 90px;">
<?php foreach ($pages as $pages_item) ?>
<tr>
<td>Pages Name</td>
<td><input type="text" name="pages_name" value="<?php echo $pages_item->pages_name; ?>"></td>
</tr>
<tr>
<td>Create Date</td>
<td><input type="text" name="create_date" value="<?php echo $pages_item- >create_date; ?>"></td>
</tr>
<tr>
<td>Order</td>
<td><input type="text" name="pages_order" value="<?php echo $pages_item->pages_order; ?>"></td>
</tr>
<tr>
<td>View Content</td>
<td><textarea rows="3" cols="20" name="pages_content"><?php echo $pages_item->pages_content; ?></textarea></td>
</tr>
<tr>
<td></td>
<td><input type="submit" class="edit" name="submit" value="SUBMIT"></td>
</tr>
<?php ?>
</table>
</div>
</div>
</div>
</div>
【讨论】:
以上是关于为 foreach() 第 48 行提供的参数无效的主要内容,如果未能解决你的问题,请参考以下文章
为托管程序中的 foreach php pdo 提供的参数无效
PHP嵌套foreach()给出警告:为foreach()提供的参数无效