Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Rozwiązane] Instrukcja warunkowa + MySQL
Forum PHP.pl > Forum > PHP
Fallout
Witam,

Na wstępie troche kodu a potem będę się tłumaczył smile.gif

  1. <?php
  2.  
  3. function CatName($cat_id)
  4. {
  5. global $db;
  6. $sql = "SELECT cat_name FROM cat WHERE cat_id = $cat_id";
  7. if ($cat_id<>0)
  8. {
  9. $db->DoSql($sql);
  10. return mysql_result($db->wynik,0,0);
  11. }
  12. else return NULL;
  13. }
  14.  
  15. function CatRoot($cat_id)
  16. {
  17. global $db;
  18. $sql = "SELECT cat_root FROM cat WHERE cat_id = $cat_id";
  19. if($cat_id<>0)
  20. {
  21. $db->DoSql($sql);
  22. return mysql_result($db->wynik,0,0);
  23. }
  24. else return NULL;
  25. }
  26.  
  27. ?>


CatName - zwraca nazwę kategorii
CatRoot - zwraca ID nadrzędnej kategorii
$cat_id - zmienna ID aktualnie wybranej kategorii

  1. CREATE TABLE cat (
  2. cat_id Int NOT NULL AUTO_INCREMENT,
  3. cat_root Int NOT NULL,
  4. cat_name Varchar(15) NOT NULL,
  5. cat_desc Varchar(80),
  6. UNIQUE (cat_id),
  7. PRIMARY KEY (cat_id)) ENGINE = MyISAM;


cat_id - wiadomo winksmiley.jpg
cat_root - przechowuje ID nadrzednej kateogrii (kategoria glowna = 0)
cat_name - nazwa kategorii
cat_desc - opis :]

*****************************************************
No to jedziem winksmiley.jpg

Bylem taki madry i udalo mi sie zrobic funkcje ShowPath($cat_id), ktora to ma za zadanie wyswietlenie takiego czegos (przyklad)

Start -> Kategoria 1 -> PodKategoria 1 -> Podkategoria 2 ... n i tak w kółko smile.gif

Niestety skończyło mi to działać na Podkategori 1.. wygladalo co mniej wiecej tak:

  1. <?php
  2.  
  3. $root = CatRoot($cid);
  4. if(($cid==0)and($root==0))
  5. echo "start";
  6. elseif(($cid<>0)and($root==0))
  7. echo "start -> ".CatName($cid);
  8. elseif(($cid<>0)and($root<>0))
  9. echo "start-> ".CatName(CatRoot($cid))." -> ".CatName($cid);
  10.  
  11. ?>


co oczywiscie nie rozwiazuje problemu bo podkategorii moze byc duuuzo, oczywiscie podkategoria staje sie kategoria o ile ma podkategorie winksmiley.jpg Tylko kategorie z cat_root==0 sa glownymi kategoriami wyswietlanymi na starcie...

po usilnych probach z while { } i do..while { } doszlem do wniosku ze intrukcje w warunkowe w php sa... za nic nie moge ujarzmic tego jak to zrobic.. 3 godzinki siedze i oczy wypalam probojac roznych opcji.. jeśli ktos bedzie taki mily i napisze mi tego while`a to bede wdzieczny bardzo smile.gif bo ja naprawde straciłem już pomysł jak to zrobić (zapewne prosto...)

z gory dziękuję i pozdrawiam smile.gif
Marcin
ennics
hm, też to przerabiam ale jestem we wczesnej fazie projektu. Robię tak:

  1. <?php
  2.  
  3. public function APP_FLOW_CONTROLER() {
  4. if (!empty($_SERVER['PATH_INFO'])) {
  5. $SERVER_PATH_INFO = explode('/', substr($_SERVER['PATH_INFO'], 1)); 
  6. }
  7. //arsort($SERVER_PATH_INFO);
  8. foreach ($SERVER_PATH_INFO as $key => $id_navy) {
  9. $query = "SELECT id_navy, n_descr FROM API_NAVY WHERE n_node = 'horizont' AND id_navy = '".$id_navy."'";
  10. $row = $this -> db -> execute($query) -> fetch_assoc();
  11. $CURRENT_PATH_INFO[$row['id_navy']] = $row['n_descr'];
  12. }
  13. $this -> tpl -> ass('CURRENT_PATH_INFO', $CURRENT_PATH_INFO); // do smarty 
  14. }
  15.  
  16. ?>


id_navy - id danego korzenia
n_descr - opis (np. strona główna)

potem w smarty
Kod
    
{ foreach from=$CURRENT_PATH_INFO key=id_navy item=n_descr }
    <a href="app/{ $id_navy }">{ $n_descr }</a> /
{ /foreach }

wykorzystuję path info i tzw. zgrabne URLe ale równie dobrze jako parametr
$_SERVER['PATH_INFO'] może być $_GET.
jak zrobię coś wiecej to podrzucę i wymienimy się doświadczeniami winksmiley.jpg
Fallout
Dobra udało się mi wreszcie guitar.gif
musialem dodac zmienna $rid, przesylana wraz z $cid przez $_GET, za kazdym razem
gdy sie klinie w katalog, w $rid przesylany jest cat_root zmiennej $cid (lub 0 jak nie ma)

Oto kod, moze sie komus przyda :]

  1. <?php
  2. function PathToCat($cid,$rid)
  3. {
  4.  $path = '';
  5. $path .= "Katalog";
  6.  
  7. if($rid<>0)
  8. {
  9.  
  10. $root=CatRoot($rid);
  11. if($root<>0)
  12. {
  13. $w_root = $root;
  14.  while($w_root<>0)
  15. {
  16. $path .= " -> ".LinkIt($w_root,CatRoot($w_root)).CatName($w_root)."</a>";
  17. $w_root = CatRoot($w_root);
  18. }
  19. }
  20. $path .= " -> ".LinkIt($rid,$root).CatName($rid)."</a>";
  21.  
  22. }
  23.  
  24. if($cid<>0) $path .= " -> ".LinkIt($cid,$rid).CatName($cid)."</a>";
  25. echo $path;
  26. }
  27.  
  28.  
  29. ?>


Osobom ktorym pomoze, chetnie podam nr konta aaevil.gif

Edit: Jako ze sie juz nameczylem to wrzuce odrazu mozliwosc linkowania pozycji smile.gif
(kod powyzej juz zmienilem odpowiednio, dodaje funkcje LinkIt() prosta jak barszcz biggrin.gif)

  1. <?php
  2.  
  3. function LinkIt($cid,$rid)
  4. {
  5. return "<a href="?cid=$cid&amp;rid=$rid">";
  6. }
  7.  
  8. ?>


pozdrawiam
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.