【问题标题】:Making a vertical menu with PHP and populating it with SQL用 PHP 制作垂直菜单并用 SQL 填充它
【发布时间】:2013-06-05 20:37:32
【问题描述】:

问题 1 - 状态 = 已解决

使用的表格是:

CREATE TABLE Rubriek(
rubrieknaam     char(50)        not null, /* char(24) */
rubrieknummer   numeric(38)     not null, /* numeric(3) */
rubriek         numeric(38)     null, /* numeric(3) */
volgnr          numeric(38)     not null, /* nuemric(2) */
constraint pk_rubrieknummer primary key(rubrieknummer),
constraint fk_rubriek foreign key(rubriek) references Rubriek (rubrieknummer)
)

我一直在尝试在 PHP 中制作一个垂直菜单,该菜单将填充提供的表格,但我遇到了一些困难。我尝试了一些代码,但我无法让它为我工作:(。菜单由类别 (rubrieken) 和子类别组成。

关于表格的更多说明:
rubrieknaam -> 类别名称
rubrieknummer -> 类别 ID
rubriek -> 告诉我们一个类别是否是一个子类别,如果不是,那么该值将为空

当我收到一些“注意:未定义的索引”错误时。更具体地说,在以下几行:

 if($parent != $menu['rubriek']){//if not seen item before
 echo "<li>".$menu['rubrieknummer']."</li>";//echo item
 if($parent != $menu['rubriek']){//if not seen before not then the value will be null:

我尝试了以下方法,但无济于事。

//connection to SQL Database
$connectionInfo = array( "UID"=>$uid,"PWD"=>$pwd,"Database"=>$databaseName);

//Connecting with SQL Authentication
$conn = sqlsrv_connect( $serverName, $connectionInfo);

$query = sqlsrv_query($conn, "SELECT * FROM Rubriek");
$parent=0;
$sub=0;
echo "<ul>";//start list
while($menu = sqlsrv_fetch_array($query)){
   if($parent != $menu['rubriek']){//if not seen item before
      if($sub != 0){echo "</ul>";}else{$sub++;}//if not first submenu, close submenu before. If first sub sub++.
      echo "<ul>";}//open submenu
   echo "<li>".$menu['rubrieknaam']."</li>";//echo item
   if($parent != $menu['rubriek']){//if not seen before
      $parent = $menu['rubriek']; //set to seen before so next loop will be recognised
   }
}
echo "</ul>"; //end list
?>

问题编号 2

我已经实施了提到的修复 Royal BG 并且它有效!但现在有一个不同的问题。我还想实现子类别,并为几个类别制作了子类别。

比如我做了下一个testdata:

    Rubrieknaam          | rubrieknummer | rubriek
    (= Name of Category) | (=Category ID)| (=Category is a subcategory of the following category):
     ----------------------------------------------------------------------------------
     Cars                | 1             | Null
     Audio               | 2             | Null
     Ford                | 3             | 1 (subcategory of Cars)
     Toyota              | 4             | 1 (subcategory of Cars)
     Speakers            | 5             | 2 (subcategory of Audio)
     Microphones         | 6             | 2 (subcategory of Audio)
     Instruments         | 7             | Null
     Guitar              | 8             | 7 (subcategory of Instruments)

记录按此顺序在数据库中列出。前两个类别被列为一个类别。其余的都被列为“音频”的子类别,即使“乐器”应该是一个新类别而不是子类别。

【问题讨论】:

  • 我喜欢你为你的 SQL 表所做的解释,但它怎么不起作用?它是否返回错误?只是显示不正确吗?它根本不显示吗?
  • 很抱歉,我忘了详细说明代码中的哪些问题。我收到一些“注意:未定义索引”错误的那一刻。更具体地说,在以下几行中: if($parent != $menu['rubriek']){//if not seen item before echo "
  • ".$menu['rubrieknummer']."
  • " ;//echo item if($parent != $menu['rubriek']){//如果之前没见过
  • 正如 Royal Bg 在他的回答中提到的,您没有在 sql 语句中选择 rubriekrubrieknummer,因此 $menu 没有填充这些字段,因此未定义索引。
  • 标签: php sql menu


    【解决方案1】:
    $query = sqlsrv_query($conn, "SELECT rubrieknaam FROM Rubriek");
    
    ...
    
    while($menu = sqlsrv_fetch_array($query)){
       if($parent != $menu['rubriek']){//if not seen item before
    

    您只选择了一列 -> rubrieknaam,并且您正在请求名为 rubriekrubrieknumer 的列。您还需要选择它们,以便能够在获取时使用它们。

    【讨论】:

    • 我已经实施了您提到的修复程序并且它有效!但现在有一个不同的问题。我还想实现子类别,并为几个类别制作了子类别。问题是子类别都列在最后一个类别下,并且没有添加到各自的类别中。有谁知道我做错了什么?我将在一分钟内编辑我的帖子以进一步澄清它。
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签