【问题标题】:Warning: Invalid argument supplied for foreach()警告:为 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();
}

还是不能显示单品

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

【问题讨论】:

标签: php mysql codeigniter 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;?>

  • 没有外观,我要展示单品
猜你喜欢
  • 1970-01-01
  • 2018-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多