0

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

简要地说,我想在这里在闪存会话中传递数据库中的数据

但我收到以下错误

致命错误:main() [function.main]:脚本试图执行方法或访问不完整对象的属性。请确保您尝试操作的对象的类定义“CI_DB_mysql_result”在调用 unserialize()之前已加载或提供 __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 -->
4

3 回答 3

1

一旦你调用了,$this->db->get();那么就没有理由使用或再次获取数据,因为你做错了,foreach loop 没有意义使用$categories->result()你已经通过使用获取数据get并且$categories你有信息所以只是循环它,因此您收到此错误,因为您没有$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

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

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

}
于 2013-07-12T16:30:19.797 回答
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 获取您的记录并将其传递给查看

于 2013-07-13T05:47:29.077 回答
0

我的解决方案。构建控制器 tank.php

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

在提交的购买处理功能中

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

我希望清楚。

于 2017-02-16T15:16:03.063 回答