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

Posted

技术标签:

【中文标题】警告:为 foreach() 提供的参数无效【英文标题】:Warning: Invalid argument supplied for foreach() 【发布时间】:2017-06-01 20:07:58 【问题描述】:

我的产品详细信息有误,我不知道还有什么要更改的地方。当我将$detail 更改为$categories 时成功但与功能子菜单相同。这不符合我的意愿

我的观点

<!-- navbar -->
<div class="row">
<?php foreach ($categories as $row) : ?>
     <div class="col-sm-3">
         <h5><?php echo $row->categoriesName; ?></h5>
         <ul><li><a href="<?php echo base_url();?>member/detail">
         <?php echo $row->productName; ?></a> </li></ul>
     </div>
<?php endforeach; ?>
</div>
     <!-- product detail -->
     <?php foreach ($detail as $details_new) : ?>
     <div class="box">
         <h1 class="text-center"><?php echo $details_new->productName;?></h1>
         <p class="price"><?php echo $details_new->price;?></p>
     </div>
     <?php endforeach; ?>

我的控制器

public function home() 
    $data=array('title'=>'Pasar Online | Ayo Belanja Sekarang',
          'username'=> $this->session->userdata('username'),
          'product' => $this->product_model->all(),
          'categories' => $this->categories_model->get_main(),
          'isi'  =>'member/index');    
    $this->load->view('template_home/wrapper',$data);

public function detail() 
    $data['username'] = $this->session->userdata('username');
    $data['categories'] = $this->categories_model->get_main();
    $data['detail'] = $this->categories_model->get_details();
    $this->load->view('member/coba',$data);

我的模特

public function get_main()
    $this->db->select('product.*,categories.*');
    $this->db->from('product');
    $this->db->join('categories','product.categoriesID=categories.categoriesID');
    $this->db->limit(5);
    $query = $this->db->get();
    if($query->num_rows() > 0) 
        $results = $query->result();
     return $results;
       
public function get_details() 
    $query = $this->db->query("SELECT * FROM product WHERE productID");
    $row = $query->row();

还是不能显示单品

我不知道我的错误在哪里...请帮助我,谢谢

【问题讨论】:

Invalid argument supplied for foreach()的可能重复 我应该改变什么? 【参考方案1】:

您正在以错误的格式迭代 details 数组。

public function get_details() 
    $query = $this->db->query("SELECT * FROM product WHERE productID");
    $row = $query->row();
    return $row;

这将只返回单行,没有任何索引,例如 - 0,1,2...

在视图页面上,您正在使用 foreach 循环,而 foreach 循环使用索引来迭代值,您可以像这样进行迭代 --

<div class="box">
         <h1 class="text-center"><?php echo $detail->productName; ?></h1>
         <p class="price"><?php echo $detail->price; ?></p>
     </div>

请使用这种方式希望它会工作..

【讨论】:

但是为什么子类别只能显示一个?? 欢迎您...对不起,我没有得到您的问题....如果我的回答对您有帮助,您能否提供支持? 但是为什么子类别只能显示一个??其他人不能的子​​类别,并且总是出现在第一个子类别 你的意思是为什么它的显示结果没有索引?? 所以当我点击子类别时,它会显示详细的子类别【参考方案2】:

在 codeigniter row() 中只选择对象格式的结果的第一行。所以不需要使用 foreach 循环。试试这样...

     <div class="box">
         <h1 class="text-center"><?php echo $detail->productName;?></h1>
         <p class="price"><?php echo $detail->price;?></p>
     </div>

并且 在模型中

public function get_details() 
    $query = $this->db->query("SELECT * FROM product WHERE productID");
    $row = $query->row();
    return $row;

【讨论】:

我想在消费者选择子品类时详细说明产品 使用ajax根据子类id获取详情? 仍然无法显示产品,我没有将其添加到 ajax 您正在发送到不同的视图,因此无需使用 ajax。但我不清楚您的问题。 如果一切正常,上面的代码将正确显示您的详细信息。【参考方案3】:

这是因为$detail变量为空,该变量中没有可用的数据,在循环之前总是检查变量中的数据

<?php if(!empty($detail))    
     foreach ($detail as $details_new) : ?>
 <div class="box">
     <h1 class="text-center"><?php echo $details_new->productName;?></h1>
     <p class="price"><?php echo $details_new->price;?></p>
 </div>
 <?php endforeach;  ?>

【讨论】:

productName;?>

price;?>

没有外观,我要展示单品

以上是关于警告:为 foreach() 提供的参数无效的主要内容,如果未能解决你的问题,请参考以下文章

为 foreach() 提供的参数无效

为 foreach() 第 48 行提供的参数无效

为托管程序中的 foreach php pdo 提供的参数无效

请帮助:“在Wordpress中为foreach()提供了无效的参数”

为啥我在 Laravel 中为 foreach 提供无效的参数以进行 json 响应?

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