数据不会显示在我的视图中

时间:2016-08-18 03:51:22

标签: php oop mysqli foreach

未定义的变量:我视图中的数据

这是输入中的简单显示数据。

那么,为什么这个输入不能显示我的查询结果呢?

我的观点

<input type="text" name="sitename" value="<?php echo $data['sitename']; ?>"><br> 

模型

public function getData()
{
    $query = "SELECT * FROM $this->tablename ORDER BY 'id' DESC LIMIT 1";

    if (!$sqli  = mysqli_query($this->cxn->connect(),$query))
    {
        throw new Exception("Error Processing Request");
    }
    else
    {
        $num = mysqli_num_rows($sqli);

        while ($num > 0) 
        {
            $data = mysqli_fetch_array($sqli);
            $num--;
        }

        return $data;   
    }
}

2 个答案:

答案 0 :(得分:0)

仅仅因为变量在某处被声明,并不意味着它随处可用。所有变量都有scope,可以访问它们。有关范围的更多信息,请参阅:http://php.net/manual/en/language.variables.scope.php

您需要将$data变量传递到视图中。我想你正在使用某种MVC框架,因为你有一个模型和一个视图。如果是这种情况,您可以查找如何将变量传递到该特定框架中的视图。控制器方法的基本结构可能如下所示:

//sudo code - not specific to an actual framework
public function controller_method() 
{
  $data = $model->getData();
  $this->template->set('data',$data);
  $this->template->load('view');
}

只需在您的特定框架中搜索如何执行此操作。希望有所帮助!

修改 根据您的评论,看起来您在加载视图后设置数据。您需要更换订单并在 $display = new Display("main"); $data = $display->getData();之前致电include'../model/display.php';

答案 1 :(得分:0)

如果查询返回0行,则while()循环将永远不会执行,因此不会设置$data

由于您只从查询中返回1行,因此您不需要循环,只需使用if即可。然后,只有在成功时才能返回$data

public function getData()
{
    $query = "SELECT * FROM $this->tablename ORDER BY 'id' DESC LIMIT 1";

    if (!$sqli  = mysqli_query($this->cxn->connect(),$query))
    {
        throw new Exception("Error Processing Request");
    }
    else
    {
        if ($data = mysqli_fetch_array($sqli)) 
        {
            return $data;
        } 
        else
        {
            return null;
        }            
    }
}