为 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 提供的参数无效

为 foreach() 提供的参数无效

PHP嵌套foreach()给出警告:为foreach()提供的参数无效

警告:为 foreach() 提供的参数无效

为代码“DateTime::createFromFormat”的 foreach () 提供的参数无效?

在 laravel 错误中为 foreach() 提供的参数无效(查看:我看不到 $value