【问题标题】:the data do not display in my view数据未显示在我的视图中
【发布时间】:2016-08-18 03:51:21
【问题描述】:

未定义变量:我认为的数据

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

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

我的看法

<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;   
    }
}

【问题讨论】:

  • 错误信息是什么?你在哪里打电话getData?引号用于字符串,反引号用于表格/列。
  • 如果查询返回 0 行,则永远不会设置 $data
  • 在哪里有$data=getData(); 或同等名称?
  • 当查询有LIMIT 1 时,为什么要使用while 循环?
  • @Dagon 是的,有

标签: php oop mysqli foreach


【解决方案1】:

仅仅因为变量在某处声明,并不意味着它在任何地方都可用。所有变量都有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-&gt;getData();之前include'../model/display.php';

【讨论】:

  • 我认为他从 getData() 函数中的 return $data 语句中得到错误,而不是调用者。
  • 他在if语句中设置$data。
  • @ziko0: 你在哪里打电话给getData()?你在哪里加载视图?
  • @MrMadsen else{ 尝试 { 包括 '../model/cone.php';包括'../model/display.php'; $display = new Display("main"); $data = $display->getData(); } catch (Exception $e) { echo $e->getMessage(); } }
  • @MrMadsen 是的,非常感谢您的编辑是正确的。
【解决方案2】:

如果查询返回 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;
        }            
    }
}

【讨论】:

  • 当你使用这个时会发生什么?您是否仍然收到有关未定义变量的警告?
  • 我的问题已解决,感谢您尝试帮助我。发生这种情况是因为我在加载视图后设置了数据。
猜你喜欢
  • 1970-01-01
  • 2017-10-10
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多