首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >那么,如果第二个块在Codeigniter中有嵌套的db查询,如何在视图上打印条件特定的结果?

那么,如果第二个块在Codeigniter中有嵌套的db查询,如何在视图上打印条件特定的结果?
EN

Stack Overflow用户
提问于 2015-10-09 16:31:33
回答 2查看 61关注 0票数 1

因此,我在自定义php上有了这个现有的代码段。我正在检查数据库中是否有现有的绘画细节。如果绘画细节r发现,我需要获得最新增加的细节,直到计数6&打印的细节相应。这是我的代码->

代码语言:javascript
复制
<?php
    $pData=mysql_query("select * from painting_data");
    if($pData === FALSE) { 
        echo "<div class='well'>No painting available.</div>";
    }
    else{
        $pDet=mysql_query("Select * from painting_data order by padd desc limit 6");
        while($pD=mysql_fetch_assoc($pDet)){
            $pId=$pD['pid'];
            $pTitle=$pD['ptitle'];
            $pImg=$pD['pimg'];
?>
<div class="col-lg-2 col-md-4 col-sm-6 img-recent-container">
    <img role="button" class="img-thumbnail img-responsive img-recent" onclick="location.href='?p=<?php echo $pId; ?>'" src="..<?php echo $pImg;?>" alt="<?php echo $pTitle;?>"/>
</div>  
<?php   }
    } ?>

现在我是新来的..。&我对如何正确地分离数据检索感到困惑。因为else块中也有一个查询。我很困惑如何不把它包括在视图中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-09 17:28:43

您应该只使用模型中的DB数据,并将返回的结果传递给控制器。这是MVC模式。

P_m.php (模型)

代码语言:javascript
复制
P_m extends CI_Model
{
    public $return = [];

    public function __construct()
    {
        parent::__construct();
        $this->load->database();//or load it in APPPATH . 'config/autoload.php'
    }

    public function p()
    {
        $q = $this->db->query("select * from painting_data");
        $return['error'] = $q->num_rows() > 0 ? FALSE : TRUE;

        $q->free_result();

        if ($return['error'] === FALSE)
        {
            $q = $this->db->query("Select * from painting_data order by padd desc limit 6");
            $this->return = $q->result();
        }

        return $return;
    }
}

P_c.php (控制器):

代码语言:javascript
复制
P_c extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
        $this->load->model('p_m');//if used more often, load it in APPPATH . 'config/config.php'
    }

    public function index()
    {
        $output_data['data_from_p_m'] = $this->p_m->p();
        $this->load->view('p_v', $output_data);
    }
}

p_v.php (视图):

代码语言:javascript
复制
if ( $data_from_p_m['error'] === FALSE ) 
{
    var_dump($data_from_p_m);
}
else
{
    echo "<div class='well'>No painting available.</div>";
}

您必须在while循环之前声明数组,才能得到所有的6 $pId$ptitle$pimg

票数 1
EN

Stack Overflow用户

发布于 2015-10-09 17:10:06

看起来您正在视图中执行db查询,是吗?

应用程序流程应该如下所示:控制器->模型->控制器->视图

当用户访问您的网站url时,控制器是用户登陆的地方。控制器调用模型,模型处理数据库,并将结果返回给控制器(我更喜欢从db获取数据并填充数组,然后将数组返回给控制器),控制器然后加载视图并与其一起提供数组。视图简单地遍历数组,最好在循环中创建html。如果数据库中没有记录,或者如果有错误,还需要一些系统。

示例代码:

代码语言:javascript
复制
Controller :

class Mypage extends CI_Controller {

public function index (  )
{
    $this->load->model ( 'Mypage _model' );

    $data['dbdata'] = $this->mypage_model->get ();

    /** Check Errors */
    if ( $data['dbdata'] === FALSE ) { //show 404 or something else }

    $data[ 'title' ] = 'my Page';

    $this->load->view ( 'mypage', $data);
}

}


Model :

class Login_model extends CI_Model {

public function __construct()
{
    $this->error ['error'] = TRUE;
}

public function get (  )
{
    $data = array ();

    /** Get your database records here.*/
    if ( $some_error_condition ) return FALSE;

    if ( $no_records_found ) return $this->error;

    return $data;
}

}

View :

if ( isSet( $error ) ) // no records found.
{
   //do something
}
else {
   foreach ( $dbdata as $key => $value )
   {
       //do something
   }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33043189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档