在codeigniter中使用重定向传递数据?

时间:2013-07-12 16:13:15

标签: php codeigniter codeigniter-2

我有一个图书网站,我希望用户在选择购买某个图书时重定向到感谢页面,感谢页面将包含对图书的推荐(就像所选书籍的相同类别一样)

简要说明我想在这里传递来自flash会话中数据库的数据

但是我收到以下错误

  

致命错误:main()[function.main]:脚本尝试执行方法或访问不完整对象的属性。请确保在 unserialize()被调用之前加载了您正在尝试操作的对象的类定义“CI_DB_mysql_result”,或者提供__autoload()函数来加载/ home / content中的类定义/27/10962827/html/beta/application/views/thanks.php在线

我有一个像以下

的控制器
// get the same category books 
            $this->db->select('*');
            $this->db->from('category');
            $this->db->where('category.id', $page_details->row()->category_id);
            $this->db->join('books', 'books.category_id = category.id');
            $this->db->limit(4, random_string('numeric', 1));
            $categories = $this->db->get();

            $this->session->set_flashdata('categories', $categories);

            redirect('order/thanks', 'refresh');


public function thanks()
{
    $categories = $this->session->flashdata('categories');

    $this->load->view('control_front', array('page' => 'thanks', 'categories ' => $categories ));       

}

这是视图

<div class="recommended">

                <?php if($categories->num_rows() > 1): ?>
                    <h3>كتب مقترحة :</h3>
                    <?php foreach($categories->result() as $cat): ?>
                    <div class="single-recomm">

                        <a href="<?php echo site_url( 'book/'.$cat->id ) ?>">
                            <img src="<?php echo site_url() . 'uploads/' . $cat->uploaded_image ?>">                                
                            <p><?php echo $cat->name .' '. $cat->sname ?></p>
                        </a>        

                    </div> <!-- end single-recomm -->
                    <?php endforeach; ?>
                <?php endif; ?>
            </div> <!-- end recommended -->

3 个答案:

答案 0 :(得分:1)

一旦你调用了$this->db->get();,那么就没有理由使用或者再次获取数据,因为你在foreach loop中做错了没有意义使用$categories->result()你已经使用get获取了数据,并且在$categories中你有信息所以只循环它,因此你得到这个错误,因为你没有{{1}中的必需对象调用$categories函数

在控制器中运行查询也是一种不好的做法,所有业务逻辑和数据库处理都应该在result()

中完成
models

您已将数据传递到感谢视图,只需遍历<div class="recommended"> <?php if(!empty($categories)): ?> <h3>كتب مقترحة :</h3> <?php foreach($categories as $cat): ?> <div class="single-recomm"> <a href="<?php echo site_url( 'book/'.$cat->id ) ?>"> <img src="<?php echo site_url() . 'uploads/' . $cat->uploaded_image ?>"> <p><?php echo $cat->name .' '. $cat->sname ?></p> </a> </div> <!-- end single-recomm --> <?php endforeach; ?> <?php endif; ?> </div> <!-- end recommended -->

$categories

答案 1 :(得分:1)

由于安全性和加载,这不是通过会话传递数据的好方法 您可以使用这样的重定向传递类别:

       //$this->db->select('t1.id');
       // $this->db->from('category AS t1');
       // $this->db->where('t1.id', $page_details->row()->category_id);
       // $this->db->join('books', 'books.category_id = t1.id');
       // $this->db->limit(4, random_string('numeric', 1));
       // $categories = $this->db->get();

        //$this->session->set_flashdata('categories', $categories);

        redirect('order/thanks/'.$page_details->row()->category_id.'', 'refresh');

并在感谢函数内部根据此category_id获取记录并将其传递给视图

答案 2 :(得分:0)

我的解决方案。 建立控制器tanks.php

然后在index()函数中加载数据。

并且

在buy proccesing

的提交功能中

您可以重定向到tanks.php控制器。

我希望清楚。