【问题标题】:CodeIgniter PHP Undefined Variable errorCodeIgniter PHP未定义变量错误
【发布时间】:2015-10-19 15:01:16
【问题描述】:

过去 2 小时我一直在努力找出为什么会出现此错误,但我仍然卡住了!我已经检查了这里的答案,但仍然没有。

在检查了类似的帖子后,我似乎找不到解决方案

我们将不胜感激

错误信息:

遇到了 PHP 错误

严重性:通知

消息:未定义变量:升级

文件名:views/Test.php

行号:207

型号:

<?php

if(!defined('BASEPATH')) exit('Hacking Attempt: Get out of the system ..!');

class M_live extends CI_Model {

        function M_live(){
            parent::Model();

        function getUpgrades(){

            $this->db->select("*");
            $this->db->from('client_trust_versions')

            $query = $this->db->get();
            return $query->result_array();    
        }    
        }
    }
?>

控制器:

<?php


if(!defined('BASEPATH')) exit('Hacking Attempt: Get out of the system ..!');

class C_Live extends CI_Controller
{    

function C_Live(){
    parent::__construct();
    $this->load->model('M_live');
}

public function index(){

    $query = $this->M_live->getUpgrades();
    $data['UPGRADES'] = null;
    if($query){
        $data['UPGRADES'] = $query;
    }

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

}
?>

查看:

<table>
    <tr>
        <th>ID</th>
        <th>Client Name</th>
        <th>App Server</th>
        <th>Instance Name</th>
        <th>BankStaff Server</th>
        <th>SQL Server</th>
        <th>Instance</th>
        <th>Health Roster Version</th>
        <th>Employee Online Version</th>
        <th>Roster Perform</th>
        <th>BankStaff Version</th>
        <th>SafeCare Version</th>
        <th>E-Expenses</th>
    </tr>

    <?php foreach((array)$UPGRADES as $upgrades){?>

        <tr><td><?php=$upgrade->ID;?></td>
        <td><?php=$upgrade->Client_Name;?></td>
        <td><?php=$upgrade->App_Server;?></td>
        <?php }?>

【问题讨论】:

  • 好吧,我猜查询不会返回结果。要测试用 $data['UPGRADES'] = array(); 替换 $data['UPGRADES'] = null; - 它应该可以工作
  • 如果你看一下变量名,你在foreach-语句中使用$upgrades,但在其中使用$upgrade。
  • 更改为升级并将 null 换成数组,但仍然出现错误...
  • 您忘记附上模型的构造方法。此外,模型代码属于 CI 的旧(小于 2.x.x)版本。应该是这样吗?您的应用的 CI 版本是多少?

标签: php codeigniter model-view-controller foreach undefined


【解决方案1】:

型号:

<?php
if(!defined('BASEPATH')) exit('Hacking Attempt: Get out of the system ..!');

class M_live extends CI_Model
{
  function M_live()
  {
    parent::Model();
  }

  function getUpgrades()
  {
    $query = $this->db->get('client_trust_versions');
    // Produces: SELECT * FROM client_trust_versions
    return $query->num_rows() > 0 ? $query->result() : NULL;
  }
}

如果找到行,这会将结果作为对象返回,如果没有行则返回 NULL。更改为返回对象而不是数组,因为这是您在视图中使用 $upgrade-&gt;key 语法的使用类型。要使用数组,您可以使用 $upgrade['key']

在控制器中使用这个

public function index(){
  $query = $this->M_live->getUpgrades();
  if(isset($query)){
      $data['upgrades'] = $query;
  }
  $this->load->view('Test', $data);
 } 

新视图:

<table>
<tr>
    <th>ID</th>
    <th>Client Name</th>
    <th>App Server</th>
    <th>Instance Name</th>
    <th>BankStaff Server</th>
    <th>SQL Server</th>
    <th>Instance</th>
    <th>Health Roster Version</th>
    <th>Employee Online Version</th>
    <th>Roster Perform</th>
    <th>BankStaff Version</th>
    <th>SafeCare Version</th>
    <th>E-Expenses</th>
</tr>

<?php
if(isset($upgrades)){
//If no rows were found $upgrades will be NULL and isset() will return false. 
//Therefore, you never try to address an undefined variable.  
  foreach($upgrades as $upgrade){?>
    <tr><td><?php=$upgrade->ID;?></td>
    <td><?php=$upgrade->Client_Name;?></td>
    <td><?php=$upgrade->App_Server;?></td></tr>
<?php }}?>
</table>

注意 $UPGRADES 已更改为 $upgrades。约定是所有大写名称都表示一个常数。请注意 foreach($upgrades as $upgrade) 中使用复数和单数 var 名称,这可以避免您在此过程中可能遇到的名称冲突。 (因此所有大写的 var 名称)

【讨论】:

  • 太好了,它有效,我知道错误。只需要获取屏幕上显示的数据。再次感谢您的帮助!
【解决方案2】:

将您的模型代码修复为:

<?php

if(!defined('BASEPATH')) exit('Hacking Attempt: Get out of the system ..!');

class M_live extends CI_Model {

        function M_live(){
            parent::Model();
        }

        function getUpgrades(){

            $this->db->select("*");
            $this->db->from('client_trust_versions')

            $query = $this->db->get();
            return $query->result_array();    
        }    
    }
?>

【讨论】:

  • 我是否使用我在控制器和视图中使用的相同代码?我也在努力让数据显示在我的视图中。有什么可以帮忙的吗?
猜你喜欢
  • 2021-07-21
  • 1970-01-01
  • 2015-06-07
  • 2011-10-27
  • 2017-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-28
相关资源
最近更新 更多