2014-11-24 104 views
1

我仍然试图包装我的头围绕PHP,所以很抱歉,如果这是一个简单的错误(我一直在寻找相当长的一段时间,只能设法得到不同的错误,如“未定义的索引”)PHP,PDO,MySQL,注意:试图获取非对象的属性

我试图做的是有一个函数,将从表中获取数据(它目前不包含很多,但将最终包含每个主网页的所有内容)。它应该采取一个ID,然后给该页面的正确的模板和内容(只是硬编码的$页面名称在现在,直到我得到它的工作)

在我的Page类我有这个

class Page{ 

public $pageid = null; 
public $pagetemplate = null; 
public $pagetitle = null; 
public $pagebody = null; 

public function __construct($data=array()){ 
    if(isset($data['page_id'])) $this->pageid = (int) $data['page_id']; 
    if(isset($data['page_template'])) $this->pagetemplate = (string) $data['page_template']; 
    if(isset($data['page_title'])) $this->pagetitle = (string) $data['page_title']; 
    if(isset($data['page_body'])) $this->pagebody = (string) $data['page_body']; 
} 

public static function getPageData($pageName){ 
    $conn = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD); 
    $sql = "SELECT page_template, page_title, page_body FROM pages WHERE page_id = :page_id LIMIT 1"; 
    $stmt = $conn->prepare($sql); 
    $stmt->bindParam(':page_id', $pageName); 
    $stmt->execute(); 
    $list = array(); 
    while($row = $stmt->fetch()){ 
     //$pageslug = $row['page_slug']; 
     $page = new Page($row); 
     $list[] = $page; 

    } 

    $conn = null; 
    return(array("results" => $list)); 
} 

}

然后在我的索引我有

function homepage(){ 
    $results = array(); 
    $data = Page::getPageData(1); 
    $results['pages'] = $data['results']; 
    $template = $results['pages']->pagetemplate; 
    require($template); 
} 

的主页功能是带一个开关的情况下,但是,这样的导航栏的变化给予的价值,我会改变这种状况以后getPageData,这应该是如何加载不同的页面。无论如何,我发现了以下错误:

注意:试图让非对象的属性在C:\ XAMPP \ htdocs中\的index.php上线48

警告:要求():文件名不能第49行的C:\ xampp \ htdocs \ index.php中为空。012: :\ XAMPP \ htdocs中\的index.php上线49

+2

那么,哪里是48行? – sectus 2014-11-24 05:29:05

+1

对不起, 48是$ template = $ results ['pages'] - > pagetemplate; 也更新第一篇文章,显示所有的页面类 – p3tch 2014-11-24 05:30:09

回答

0

getPageData()方法的“结果”的索引,而不是一个对象在返回一个数字索引阵列添加额外的检查。这意味着$ results ['pages']包含一个数字索引的数组,而不是一个对象。 var_dump()它并检查出来。

你可能需要做一些事情,如:

$template = $results['pages'][0]->pagetemplate; 
+0

我认为你是正确的,它出来作为数组(0 ){} 但是,建议的修复只是给出了一个额外的未定义偏移量:0错误。你会如何建议让getPageData返回一个对象呢? – p3tch 2014-11-24 05:47:58

+0

像返回新的页面(....? – p3tch 2014-11-24 05:51:59

+0

@ p3tch)对于初学者来说,为什么检索循环中的记录并将它们放入数组中?您只是读出一条记录。函数调用是有意义的,我的意思是,为什么把它放在一堆数组中,你从中得到了什么? – 2014-11-24 15:30:00

0

改变你的函数返回的array(Page)代替array(array(Page))

$list = null; 
while($row = $stmt->fetch()){ 
    $page = new Page($row); 
    $list = $page; 
} 

另外,对于查询的结果返回

+0

不,仍然得到相同的错误(除非我需要改变别的东西除此之外?) – p3tch 2014-11-24 05:37:28

相关问题