【问题标题】:Severity: Notice Message: Trying to get property of non-object codeigniter [duplicate]严重性:通知消息:尝试获取非对象 codeigniter 的属性 [重复]
【发布时间】:2018-11-19 19:09:31
【问题描述】:

我的控制者:

function generateallmonthreport()
    {
        $month = $this->input->post('month');
        $year = $this->input->post('year');
        $familyid = $this->session->userdata('family_id');

        $fulldata['dates'] = $this->Itemreport_model->getreportallmonth($month,$year);
        $fulldata['members1'] = $this->Itemreport_model->getindependentmembers($familyid);
        $fulldata['members2'] = $this->Itemreport_model->getindependentmembers($familyid);
        $fulldata['members3'] = $this->Itemreport_model->getindependentmembers($familyid);
        $fulldata['members4'] = $this->Itemreport_model->getindependentmembers($familyid);
        $fulldata['members5'] = $this->Itemreport_model->getindependentmembers($familyid);
        $fulldata['year'] = $year;
        $fulldata['month'] = $month;

        $this->load->view('header');
        $this->load->view('itemreports/allmonthreportpage', $fulldata);
        $this->load->view('footer');
    }

我的模特:

function getreportallmonth($month,$year)
{
    $sql = "SELECT DISTINCT `item_date` FROM `items` WHERE MONTH(`item_date`)='$month' AND YEAR(`item_date`)='$year'";
    $query = $this->db->query($sql);
    return $query->result();
}

function getindependentmembers($familyid)
{
    $sql = "SELECT * FROM `familymember` WHERE `family_id`='$familyid' AND `dependency`='1'";
    $query = $this->db->query($sql);
    return $query->result();
}

function getcountofexpensetype($memberid,$year,$month)
{
    $sql = "SELECT COUNT(DISTINCT `item_expensetype`) AS spancount FROM `items` WHERE `item_purchaseby`='$memberid' AND MONTH(`item_date`)='$month' AND YEAR(`item_date`)='$year' AND `item_expensetype` IS NOT NULL";
    $query = $this->db->query($sql);
    return $query->result();
}

function getexpensetype($memberidforexpensetype,$year,$month)
{
    $sql = "SELECT DISTINCT `item_expensetype` as expensetype FROM `items` WHERE `item_purchaseby`='$memberidforexpensetype' AND MONTH(`item_date`)='$month' AND YEAR(`item_date`)='$year' AND `item_expensetype` IS NOT NULL";
    $query = $this->db->query($sql);
    return $query->result();
}

function getallitems($thisdate)
{
    $sql = "SELECT `item_name`,`item_price`,`item_purchasetype` FROM `items` WHERE `item_date`='$thisdate'";
    $query = $this->db->query($sql);
    return $query->result();
}

function getexpensetypefinal($memberidforexpensetypeprice,$year,$month)
{
    $sql = "SELECT DISTINCT `item_expensetype` as expensetype FROM `items` WHERE `item_purchaseby`='$memberidforexpensetypeprice' AND MONTH(`item_date`)='$month' AND YEAR(`item_date`)='$year' AND `item_expensetype` IS NOT NULL";
    $query = $this->db->query($sql);
    return $query->result();
}

我的观点:

<table border="2" id="tab" style="width:100%" class="text-center m-auto table table-bordered table-hover">

                    <tr>
                        <td rowspan="2">Date</td>
                        <td rowspan="2">Items</td>

                        <!-- php code for getting all individual member header for individual expense types -->

                        <?php foreach ($members1 as $members1) { ?>
                                <?php
                                    $this->load->model('Itemreport_model');
                                    $memberid = $members1->member_id;
                                    $countforcolspan = $this->Itemreport_model->getcountofexpensetype($memberid,$year,$month);
                                ?>

                                <td colspan="<?php foreach ($countforcolspan as $countforcolspan) { echo $countforcolspan->spancount+1; } ?>">
                                    <?php echo $members1->membername."'s Individual Expenses"; ?>
                                </td>

                        <?php } ?>

                        <td rowspan="2">Total Expense On Common</td>

                        <!-- php code for getting all individual member header -->
                        <?php foreach ($members2 as $members2) { ?>
                            <td rowspan="2"><?php echo $members2->membername."'s Total Expense (Individual + Common)"; ?></td>
                        <?php } ?>

                        <td rowspan="2">Total Expense Of Family</td>
                    </tr>

                    <tr>
                        <?php
                            foreach ($members3 as $members3) {
                                $memberidforexpensetype = $members3->member_id;
                                $expensetype = $this->Itemreport_model->getexpensetype($memberidforexpensetype,$year,$month);
                                foreach ($expensetype as $expensetype) { ?>
                                    <td><?php echo $expensetype->expensetype; ?></td>
                                <?php } ?>
                                <td>Total</td>
                            <?php }
                        ?>
                    </tr>

                    <tbody id="tbodydata">

                        <?php foreach ($dates as $dates) { ?>
                            <tr>

                                <td><?php $thisdate = $dates->item_date; echo $thisdate; ?></td>

                                <td><?php
                                    $allitems = $this->Itemreport_model->getallitems($thisdate);
                                    foreach ($allitems as $allitems) {
                                        echo $allitems->item_name; ?> (<?php echo $allitems->item_price; ?>)
                                    <?php }
                                ?></td>

                                <?php foreach ($members4 as $members4) {
                                    $memberidforexpensetypeprice = $members4->member_id;
                                    $countforcolspan = $this->Itemreport_model->getexpensetypefinal($memberidforexpensetypeprice,$year,$month);
                                 } ?>
                            </tr>
                        <?php } ?>

                    </tbody>

代码似乎工作正常,但给了我尝试获取非对象属性的通知

错误:

遇到 PHP 错误 严重性:通知 消息:试图获取非对象的属性 文件名:itemreports/allmonthreportpage.php 行号:68

回溯: 文件:D:\wampserver\www\home\application\views\itemreports\allmonthreportpage.php 线路:68 函数:_error_handler

文件:D:\wampserver\www\home\application\controllers\Itemreport.php 线路:91 功能:查看

文件:D:\wampserver\www\home\index.php 线路:315 函数:require_once

我无法发现代码的不当部分..请帮助..!!

【问题讨论】:

  • 您能否识别allmonthreportpage.php 和该文件中的第 68 行
  • 是的,它的视图文件
  • 第 68 行????
  • foreach ($allitems as $allitems) 然后 BANG 将 $allitems 的内容从一个数组转移到别的东西
  • 然后再次砰砰foreach ($members4 as $members4)

标签: php mysql codeigniter codeigniter-3


【解决方案1】:

如 cmets 中所示,您不能使用保存数组的变量来保存值,例如 foreach ($members4 as $members4)。它会覆盖$members4 中保存的值,从而使循环执行您意想不到的操作。

要解决它,只需使用不同的变量,例如 $member 就像这里:

 <?php foreach ($members4 as $member) {
     $memberidforexpensetypeprice = $member->member_id;
     $countforcolspan = $this->Itemreport_model->getexpensetypefinal($memberidforexpensetypeprice,$year,$month);
 } ?>

【讨论】:

  • 除了其他foreach的似乎没有引起错误。我猜$member 实际上并不是一个对象,只是为了让事情更混乱
  • 根据您的解释进行了编辑。工作正常。非常感谢...我浪费了将近一天的时间来寻找解决方案。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2017-07-21
  • 2017-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-21
相关资源
最近更新 更多