2014-11-24 153 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

相關問題