未定义的变量:我视图中的数据
这是输入中的简单显示数据。
那么,为什么这个输入不能显示我的查询结果呢?
我的观点
<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;
}
}
答案 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;
}
}
}