2012-12-17 125 views
-2

我用Google搜索,發現的東西,可以給我(http://wizardinternetsolutions.com/web-database-design/dynamic-multilevel-css-menu-php-mysql/)工作。我打算修改它一下,並根據我的需要定製它,一旦我得到它的工作。 -ej。我想用label作爲Primary Key,而不是一個隨機數。PHP和MySQL:動態多級菜單

但是,我收到一個錯誤:警告:mysql_fetch_assoc()期望參數1是資源,布爾在/home/content/81/10038181/html/_html/menu/menu-generator.php在線23

有趣的是,當我運行查詢,它工作正常。

這裏是表結構(SQL):

CREATE TABLE `menu` (
    `id` int(11) NOT NULL auto_increment, 
    `label` varchar(50) NOT NULL default '', 
    `link` varchar(100) NOT NULL default '#', 
    `parent` int(11) NOT NULL default '0', 
    `sort` int(11) default NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM AUTO_INCREMENT=248 DEFAULT CHARSET=latin1; 

Here is a mockup of the data

PHP:

$dbc = new mysqli("localhost", "username", "password", "temp_database"); 
$dbn = "temp_database"; 
    function display_children($parent, $level) { 
     $sql = "SELECT a.id, a.label, a.link, Deriv1.Count FROM `$dbn`.`menu` a LEFT OUTER JOIN (SELECT `parent`, COUNT(`parent`) AS Count FROM `".$dbn."`.`menu` GROUP BY parent) Deriv1 ON a.id = Deriv1.parent WHERE a.parent=" . $parent . " ORDER BY `sort`"; 
     //echo $sql; //For testing purposes 
     $result = $dbc->query($sql); 
     echo "<ul>\n"; 

     while ($row = $result->fetch_assoc()) { 
      if ($row['Count'] > 0) { 
       echo "<li><a href='" . $row['link'] . "'>" . $row['label'] . "</a>"; 
       display_children($row['id'], $level + 1); 
       echo "</li>"; 
       } 
      elseif ($row['Count']==0) { 
       echo "<li><a href='" . $row['link'] . "'>" . $row['label'] . "</a></li>"; 
       } 
      else; 
     } 
     echo "</ul>"; 
    } 
    display_children(0, 1); 
+0

文檔有趣的是我逼債知道哪條線是線23 :) – ajreal

+0

您的mysql_query失敗,因此在返回$結果變量布爾值false。 –

+0

可能意味着'$ result'是錯誤的。在'mysql_query'之後放置'var_dump($ result)'來查看查詢是否正確執行。 – Osiris

回答

0

我跟着鏈接 - 沒有連接到數據庫的所有代碼。看看另一個包含mysql_connect的PHP-MySql教程。

而且,這僅僅是一個權宜之計 - mysql_擴展已被棄用。改用mysqli。檢查php.net

+0

我沒有包含有關數據庫連接的任何信息。另外,我注意到,它需要'mysql_select_db();'當我加入這一行,它運行的代碼。現在,既然你指出了,我將不得不修改它以使用'mysqli' – Omar

+0

我也想修改這個代碼,所以我可以使用'label'作爲主鍵,並且完全消除'ID' – Omar