Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Drzewo/tree mysql/php
Forum PHP.pl > Forum > Przedszkole
tomaner
witam wszystkich..... jest to moj pierwszy post.... zagladam tu od dawna ale teraz dopiero sie zarejestrowałem.... przeszukałem juz forum i nie znalazlem pasujacego do moich potrzeb wiec napisalem swój kod i tu moja prosba czy za bardzo nie obciaza on serwera?questionmark.gif i czy mozna by to uproscic? praktycznie mozna dodawac nieskonczona liczbe kategorii i podkategorii + mozliwość sterowania kolejnością na liście... jestem laikiem wiec prosze o wyrozumialosc...

  1. <?PHP
  2. # DRZEWO KATEGORII
  3. # tomaner[at]o2.pl
  4.  
  5. // ustawienia mysql
  6. $polaczenie = mysql_connect("localhost", "root", "");
  7. mysql_select_db("simpleshop");
  8.  
  9. // funkcja pobierajaca podkategorie
  10. function getSubCat($id){
  11. $ilosc[$id] = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM kategorie WHERE podkat='$id';"));
  12.  if($ilosc[$id][0]>0){
  13.    $dane[$id] = '<ul>';
  14.    $zap[$id] = mysql_query("SELECT * FROM kategorie WHERE podkat='$id' ORDER BY pozycja ASC;");
  15.    while($db[$id] = mysql_fetch_array($zap[$id])){
  16.    
  17.    // dane do zmiany pozycji
  18.    $aktualnaPozycja[$id] = mysql_fetch_array(mysql_query("SELECT * FROM kategorie WHERE id='".$db[$id][0]."';"));
  19.    $AA[$id] = mysql_fetch_array(mysql_query("SELECT * FROM kategorie WHERE podkat='".$aktualnaPozycja[$id][1]."' AND pozycja>'".$aktualnaPozycja[$id][2]."' ORDER BY pozycja ASC LIMIT 1;"));
  20.    $BB[$id] = mysql_fetch_array(mysql_query("SELECT * FROM kategorie WHERE podkat='".$aktualnaPozycja[$id][1]."' AND pozycja<'".$aktualnaPozycja[$id][2]."' ORDER BY pozycja DESC LIMIT 1;"));
  21.  
  22.    $menuUpDown[$id] = "";
  23.    // buduje menu przesuniec gora dol
  24.    if(!empty($BB[$id][0])){
  25.    $menuUpDown[$id] .= '<img src="space.gif" width="3" height="12"><a href="./?mod=move&co='.$db[$id][0].'&gdzie='.$BB[$id][0].'"><img src="up.gif" border=0 width="12" height="12"></a>';
  26.    }
  27.    if(!empty($AA[$id][0])){
  28.    $menuUpDown[$id] .= '<img src="space.gif" width="3" height="12"><a href="./?mod=move&co='.$db[$id][0].'&gdzie='.$AA[$id][0].'"><img src="down.gif" border=0 width="12" height="12"></a>';
  29.    }
  30.  
  31.    $dane[$id] .= '<li><a href="./?cat='.$db[$id][0].'">'.$db[$id][3].'</a> <a href="java script:addCat('.$db[$id][0].');"><img src="add.gif" border=0 width="12" height="12"></a><img src="space.gif" border=0 width="3" height="12"><a href="java script:editCat(''.$db[$id][0].'',''.$db[$id][3].'');"><img src="edit.gif" border=0 width="12" height="12"></a><img src="space.gif" width="3" height="12"><a href="java script:delCat(''.$db[$id][0].'',''.$db[$id][3].'');"><img src="del.gif" border=0 width="12" height="12"></a>'.$menuUpDown[$id].'</li>';
  32.    $dane[$id] .= getSubCat($db[$id][0]);
  33.    }
  34.    $dane[$id] .= '</ul>';
  35.    return $dane[$id];
  36.  }
  37. }
  38.  
  39. // dodaje kategorie
  40. if($_GET['mod']=="add"){
  41. $pozycja = mysql_fetch_array(mysql_query("SELECT * FROM kategorie ORDER BY id DESC LIMIT 1;"));
  42. mysql_query("INSERT INTO kategorie VALUES('','".$_GET['kat']."','".($pozycja[0]+1)."','".urldecode($_GET['nazwa'])."');");
  43. header("Location: ./");
  44. }
  45.  
  46. //usowa kategorie
  47. if($_GET['mod']=="del"){
  48. $zapytanie=mysql_query("DELETE FROM kategorie WHERE id='".$_GET['kat']."';");
  49. header("Location: ./");
  50. }
  51.  
  52. // przesowa kategorie
  53. if($_GET['mod']=="move"){
  54.  
  55.  if(empty($_GET['gdzie'])){
  56.  $_GET['gdzie'] = $_GET['co'];
  57.  }
  58.  
  59. $valCo = mysql_fetch_array(mysql_query("SELECT * FROM kategorie WHERE id='".$_GET['co']."';"));
  60. $valGdzie = mysql_fetch_array(mysql_query("SELECT * FROM kategorie WHERE id='".$_GET['gdzie']."';"));
  61.  
  62. mysql_query("UPDATE kategorie SET pozycja='".$valGdzie[2]."' WHERE id='".$valCo[0]."';");
  63. mysql_query("UPDATE kategorie SET pozycja='".$valCo[2]."' WHERE id='".$valGdzie[0]."';");
  64. header("Location: ./");
  65.  
  66. }
  67.  
  68. //edytuje kategorie
  69. if($_GET['mod']=="edit"){
  70.  
  71. mysql_query("UPDATE kategorie SET nazwa='".urldecode($_GET['nazwa'])."' WHERE id='".$_GET['kat']."';");
  72. header("Location: ./");
  73.  
  74. }
  75.  
  76.  
  77.  
  78.  
  79. <script Language="JavaScript">
  80. function addCat(subkat){
  81. var nazwa = prompt("Podaj nazwę kategorii:", "");
  82. if(nazwa == null || nazwa == ""){
  83. }else{
  84. document.location = "./?mod=add&kat="+subkat+"&nazwa="+nazwa;
  85. }
  86. }
  87.  
  88. function delCat(idkat,val){
  89. if(confirm("Czy napewno chcesz usunąć kategorię: "+val+"?")){
  90. document.location = "./?mod=del&kat="+idkat;
  91. }
  92. }
  93.  
  94. function editCat(idkat,val){
  95. var nazwa = prompt("Nazwa kategorii:", val);
  96. if(nazwa == null || nazwa == "" || nazwa == val){
  97. }else{
  98. document.location = "./?mod=edit&kat="+idkat+"&nazwa="+nazwa;
  99. }
  100. }
  101. </SCRIPT>
  102.  
  103. <input type=button onclick="addCat(0);" value="+ kategoria główna"><hr>
  104. ');
  105.  
  106.  
  107.  
  108.  
  109. echo('<ul>');
  110. $zap=mysql_query("SELECT * FROM kategorie WHERE podkat='0' ORDER BY pozycja ASC;");
  111. while($db=mysql_fetch_array($zap)){
  112.  
  113. $aktualnaPozycja = mysql_fetch_array(mysql_query("SELECT * FROM kategorie WHERE id='".$db[0]."';"));
  114. $AA = mysql_fetch_array(mysql_query("SELECT * FROM kategorie WHERE podkat='".$aktualnaPozycja[1]."' AND pozycja>'".$aktualnaPozycja[2]."' ORDER BY pozycja ASC LIMIT 1;"));
  115. $BB = mysql_fetch_array(mysql_query("SELECT * FROM kategorie WHERE podkat='".$aktualnaPozycja[1]."' AND pozycja<'".$aktualnaPozycja[2]."' ORDER BY pozycja DESC LIMIT 1;"));
  116. $menuUpDown = "";
  117.  
  118.  if(!empty($BB[0])){
  119.  $menuUpDown .= '<img src="space.gif" width="3" height="12"><a href="./?mod=move&co='.$db[0].'&gdzie='.$BB[0].'"><img src="up.gif" border=0 width="12" height="12"></a>';
  120.  }
  121.  if(!empty($AA[0])){
  122.  $menuUpDown .= '<img src="space.gif" width="3" height="12"><a href="./?mod=move&co='.$db[0].'&gdzie='.$AA[0].'"><img src="down.gif" border=0 width="12" height="12"></a>';
  123.  }
  124.  
  125. echo('<li><a href="./?cat='.$db[0].'">'.$db[3].'</a> <a href="java script:addCat('.$db[0].');"><img src="add.gif" border=0 width="12" height="12"></a><img src="space.gif" border=0 width="3" height="12"><a href="java script:editCat(''.$db[0].'',''.$db[3].'');"><img src="edit.gif" border=0 width="12" height="12"></a><img src="space.gif" width="3" height="12"><a href="java script:delCat(''.$db[0].'',''.$db[3].'');"><img src="del.gif" border=0 width="12" height="12"></a>'.$menuUpDown.'</li>');
  126. echo(getSubCat($db[0]));
  127. }
  128. echo('</ul>');
  129.  
  130. ?>



a tu wyglad tabeli kategorie:
  1. ID - bigint(255) AUTO_INCREMENT
  2. PODKAT - bigint(255)
  3. POZYCJA - bigint(255)
  4. NAZWA - text


ewentualnie wszystko do pobrania spakowane rar'em:
erix
Jest to jedno z gorszych rozwiązań - ile podpoziomów, tyle zapytań.

Poszukaj drzewka bazującego na kolumnie kolejnosc. Zresztą, u źródeł też coś jest: http://dev.mysql.com/tech-resources/articl...hical-data.html

Na stronach Zenda też coś było.
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.