Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapis bazy do tablicy
Forum PHP.pl > Forum > PHP
infoo1
jak z bazy wygenerować taką tablicę:
  1. <?php
  2. $arr = array(
  3.        'Nagłówek' => array(
  4.          'Anchor1' => 'Href1',
  5.          'Anchor2' => 'Href2',
  6.          'Anchor3' => 'Href3'
  7.        ),
  8.  
  9.        'Nagłówek2' => array(
  10.          'Anchor1' => 'Href1',
  11.          'Anchor2' => 'Href2',
  12.          'Anchor3' => 'Href3'
  13.        )
  14. itd.
  15.      );
  16. ?>

Struktura mojej tabeli:
Kod
+-----+------+---------+------------+------------+
   | id  | type | extends | href       | name       |
   +-----+------+---------+------------+------------+

Id- id menu
Type: są różne typy. Oto one (cyfry to to, co jest wpisane w type):
Kod
1 - menu górne //To nie jest teraz ważne
   2 - nagłówek menu lewego
   3 - menu lewe

Extends - nagłówek tego menu (0 oznacza brak, czyli nagłówek)
Href - adres
Name - nazwa

Czyli np. z tego:
Kod
+-----+------+---------+------------+------------+
   | id  | type | extends | href       | name       |
   +-----+------+---------+------------+------------+
   | 524 | 2    | 0       | 0          | Nagłówek 1 |
   +-----+------+---------+------------+------------+
   | 525 | 3    | 524     | index.php  | Menu 1     |
   +-----+------+---------+------------+------------+
   | 526 | 3    | 524     | index2.php | Menu 2     |
   +-----+------+---------+------------+------------+
   | 527 | 3    | 524     | index3.php | Menu 3     |
   +-----+------+---------+------------+------------+
   | 528 | 3    | 524     | index4.php | Menu 4     |
   +-----+------+---------+------------+------------+
   +-----+------+---------+------------+------------+
   +-----+------+---------+------------+------------+
   | 529 | 2    | 0       | 0          | Nagłówek 2 |
   +-----+------+---------+------------+------------+
   | 530 | 3    | 529     | index.php  | Menu 1     |
   +-----+------+---------+------------+------------+
   | 531 | 3    | 529     | index2.php | Menu 2     |
   +-----+------+---------+------------+------------+
   | 532 | 3    | 529     | index3.php | Menu 3     |
   +-----+------+---------+------------+------------+
   | 533 | 3    | 529     | index4.php | Menu 4     |
   +-----+------+---------+------------+------------+
Powstanie takie menu:
Kod
+------------+
   | Nagłówek 1 |
   +------------+
   --| Menu 1 |--
   --| Menu 2 |--
   --| Menu 3 |--
   --| Menu 4 |--
   +------------+
  
   +------------+
   | Nagłówek 2 |
   +------------+
   --| Menu 1 |--
   --| Menu 2 |--
   --| Menu 3 |--
   --| Menu 4 |--
   +------------+
więc taka tablica:
  1. <?php
  2. $arr = array(
  3.      'Nagłówek 1' => array(
  4.        'Menu 1' => 'index.php',
  5.        'Menu 2' => 'index2.php',
  6.        'Menu 3' => 'index3.php',
  7.        'Menu 4' => 'index4.php'
  8.      ),
  9.  
  10.      'Nagłówek 2' => array(
  11.        'Menu 1' => 'index.php',
  12.        'Menu 2' => 'index2.php',
  13.        'Menu 3' => 'index3.php',
  14.        'Menu 4' => 'index4.php'
  15.      )
  16.    );
  17. ?>
Jak zapisać bazę do takiej tabeli?
ultra_18
Zapytanie musisz sam sobie dopisac bo nie mam czasu sie wczytywac. Kod pisany na szybko. Jeżeli to nie jest to o co ci chodzi to moze cie chociaz naprowadzi

  1. <?php
  2. $arr = array();
  3.  
  4. $i = 1;
  5.  
  6.  
  7. while($wynikzapytania =  mysql_fetch_row(zapytanie))
  8. {
  9. $arr = array('Nagłówek 1' => array("Menu $i => $wynikzapytania[$i-1]"));
  10. $arr = array('Nagłówek 2' => array("Menu $i => $wynikzapytania[$i-1]"));
  11. }
  12. ?>
infoo1
Nie o to chodzi.
1. Nie będzie tylko 2 nagłówków menu i to jeszcze z nazwą Nagłówek {numer}, tylko tak, jak jest w bazie w polu name.
2. To samo z "menu {numer}"
3. Jaki dać warunek, aby pobrało type = 2 lub 3? Bo WHERE type=2 OR type=3 nie działa.
Gryf
hmm... a przypadkiem przy zapytaniu SQL warunek WHERE type=2 OR type=3
nie powinien znajdować się w nawiasie?
infoo1
Dzięki, teraz zapytanie działa. A co z głównym problemem?
Gryf
skoro w tabeli masz pole extends --> czyli id pod jakim to ma się znaleźć nagłówkiem
czy też do jakiej grupy należy, to po prostu rozbuduj zapytanie o Group by
infoo1
Zrobię to inaczej. Tylko coś nie działa:
  1. <?php
  2. $sql = "SELECT * FROM ".SITE_MENUS_TABLE." WHERE type=2 OR type=3";
  3.      $sql = $db->sql_query($sql);
  4.      $arr = $db->sql_fetchrow($sql);
  5.      while($row =  mysql_fetch_array($sql))
  6.      {                                
  7.        print_r($row);
  8.      }
  9. ?>
Nie pokazuje mi wszystkich rekordów, gdzie type=2 lub type=3 (pokazuje tylko jeden rekord. Dokładniej:
Kod
Array ( [0] => 3 [id] => 3 [1] => 2 [type] => 2 [2] => 2 [extends] => 2 [3] => index.php [href] => index.php [4] => 1 [visible] => 1 [5] => [name] => )
).
erix
  1. <?php
  2. $arr = $db->sql_fetchrow($sql);
  3.     while($row =  mysql_fetch_array($sql))
  4. ?>

Na zdrowy chłopski rozum, to w pętli powinna być Twoja metoda obsługi SQL, a nie mysql_fetch_array" title="Zobacz w manualu PHP" target="_manual.
infoo1
Cytat
Na zdrowy chłopski rozum, to w pętli powinna być Twoja metoda obsługi SQL, a nie mysql_fetch_array.
Wiem, ale jak nie działało, to na wszelki wypadek wywaliłem $db->sql_fetcharray(); (kilka razy pomogło, ale tylko do testów - później musiałem to włączyć).


Zrobiłem tak:
  1. <?php
  2. function display_leftmenu()
  3.  {
  4.    global $template, $db;
  5.  
  6.    $arr = array(array(array()));
  7.  
  8.    $sql = "SELECT id,name FROM ".SITE_MENUS_TABLE." WHERE type=2 ORDER BY id ASC";
  9.    $sql = $db->sql_query($sql);
  10.    while($row = $db->sql_fetchrow($sql))
  11.    {
  12.      $headers[] = array($row['id'],$row['name']);
  13.    }
  14.  
  15.    foreach ($headers as $key => $value)
  16.    {
  17.      $id   = $value[0];
  18.      $name = $value[1];
  19.      $sql = "SELECT href,name FROM ".SITE_MENUS_TABLE." WHERE extends='".$id."' ORDER BY id ASC";
  20.      $sql = $db->sql_query($sql);
  21.      while($row = $db->sql_fetchrow($sql))
  22.      {
  23.        unset($arr[0]);
  24.        $arr[$headers[$key][1]][$row['name']] = $row['href'];
  25.  
  26.      }
  27.  
  28.    }
  29.  
  30.  
  31.    foreach ($arr as $title => $arr)
  32.    {
  33.      $template->assign_block_vars('leftmenu', array(
  34.        'TITLE'    => $title
  35.      ));
  36.  
  37.      foreach ($arr as $anchor => $href)
  38.      {
  39.        $template->assign_block_vars('leftmenu.leftmenubox', array(
  40.          'HREF'        => $href,
  41.          'ANCHOR'      => $anchor
  42.        ));
  43.      }
  44.    }
  45.  }
  46. ?>
I działa smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.