2014-02-25 39 views
0

如果我的問題可能太簡單,我是新的w/OPP和大赦免:) 表類別,導航等包含多行(類別:三星,蘋果等;和導航:關於我們,條款等),都主張在所有頁面菜單(家,產品等)OOP PHP MySQL返回多行和變量

我以前的PHP代碼和工作的良好低於

<div id="categories"> 
    <ul> 
     <? 
     $mydbcategories = new myDBC(); 
     $resultcategories = $mydbcategories->runQuery("SELECT * FROM `category`"); 
     while ($rowcategories = $mydbcategories->runFetchArray($resultcategories)) { 
      echo '<li><a href="'.ROOT_URL.$rowcategories[url].'">'.$rowcategories[title].'</a></li>'; 
     } 
     ?> 
    </ul> 
    </div> 
    <div id="navigation"> 

    <ul> 
     <? 
     $mydbnavigation = new myDBC(); 
     $resultnavigation = $mydbnavigation->runQuery("SELECT * FROM `navigation`"); 
     while ($rownavigation = $mydbnavigation->runFetchArray($resultnavigation)) { echo '<li><a href="'.ROOT_URL.$rownavigation [url].'">'.$rownavigation [title].'</a></li>'; 
     } 
     ?> 
    </ul> 
    </div> 

我想實現OOP PHP和創建班級然後存儲在classes.php

<? 
    class Menu{ 
    var $title; 
    var $url; 
    function setMenu($db){ 
    $mydbMenu= new myDBC(); 
    $resultmenu = $mydbMenu->runQuery("SELECT * FROM `$db`"); 
    $resultmenurows = mysqli_num_rows($resultmenu); 
    while ($rowmenu = $mydbMenu->runFetchArray($resultmenu)){ 
     $this->title = $rowmenu[title]; 
     $this->url = $rowmenu[url]; 
    } 
    } 
    function getTitle() { return $this->title;} 
    function getUrl() { return $this->url;} 
    } 
    ?> 

然後我編輯我的舊代碼與下面的新的;

<div id="categories"> 
    <ul> 
    <? 
    $catmenu = new Menu(); 
    while ($catmenu ->setMenu('category')) { 
     echo '<li><a href="'.ROOT_URL.$catmenu->getUrl().'">'.$catmenu->getTitle().'</a></li>'; 
     } 
     ?> 
    </ul> 
    </div> 

    <div id="navigation"> 
    <ul> 
     <? 
     $navmenu = new Menu(); 
     while ($navmenu ->setMenu('category')) { 
    echo '<li><a href="'.ROOT_URL.$navmenu ->getUrl().'">'.$navmenu ->getTitle().'</a></li>'; 
     } 
     ?> 
    </ul> 
</div> 

我測試過,錯誤可能是因爲setMenu函數中有多行(來自表)。 我怎樣才能返回這多行?我應該使用數組嗎? 請幫我解決這個和任何答覆真的很感激

+1

*我測試和錯誤* - 什麼是錯誤? – DanFromGermany

回答

2
  1. 您編碼PHP4 OOP的風格,這是非常不合時宜的。請勿使用var,請使用publicprotected,private

  2. 在這裏,title作爲一個常量(不包括引號),正確的:$this->title = $rowmenu['title'],同樣與$rowcategories[title]

  3. "SELECT * FROM $db"這是正確的?或者你的意思是SELECT * FROM menu WHERE xxx='" . $db . "',如果查找失敗,你會發現錯誤嗎?

您還應該看看PHP設計模式和代碼風格來改進!

+0

謝謝你也諮詢:) – user3349980

-1

嘗試下面的PHP代碼

<? 

class Menu { 

var $title; 
var $url; 

    function setMenu($db) { 
     $mydbMenu = new myDBC(); 
     $resultmenu = $mydbMenu->runQuery("SELECT * FROM `$db`"); 
     $resultmenurows = mysqli_num_rows($resultmenu); 
     $this->title = array(); 
     $this->url = array(); 
     while ($rowmenu = $mydbMenu->runFetchArray($resultmenu)) { 
      $this->title[] = $rowmenu['title']; 
      $this->url[] = $rowmenu['url']; 
     } 
    } 

    function getTitle($ind) { 
     return $this->title[$ind]; 
    } 

    function getUrl($ind) { 
     return $this->url[$ind]; 
    } 

} 
?> 

和HTML

<div id="categories"> 
    <ul> 
     <? 
     $catmenu = new Menu(); 
     $catmenu->setMenu('category'); 
     $i = 0; 
     while ($catmenu->getTitle($i)) { 
      echo '<li><a href="' . ROOT_URL . $catmenu->getUrl($i) . '">' . $catmenu->getTitle($i) . '</a></li>'; 
      $i++; 
     } 
     ?> 
    </ul> 
</div> 

<div id="navigation"> 
    <ul> 
     <? 
     $navmenu = new Menu(); 
     $navmenu->setMenu('navigation'); 
     while ($navmenu->getTitle($i)) { 
      echo '<li><a href="' . ROOT_URL . $navmenu->getUrl($i) . '">' . $navmenu->getTitle($i) . '</a></li>'; 
      $i++; 
     } 
     ?> 
    </ul> 
</div> 
+0

謝謝你的回答,現在解決了。再次感謝你:) – user3349980

+0

如果這個答案可以幫助你,那麼請投票或接受這個答案作爲正確的答案 – Hassan

+0

是的,我做過之前 – user3349980