Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] drzewo kategorii
fantaff
post 26.11.2010, 13:43:10
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 26.11.2010

Ostrzeżenie: (0%)
-----


witam

przejde do rzeczy odrazu.

mam tabele o nazwie category w bazie która wygląda nast. :

id_category || parent_id || name

i wiadomo odpowiednio
1 || 0 || cos
2 || 0 || cos2
3 || 1 || cos3
4 || 2 || cos4

znalazlem 2 sposoby aby wyswietlic drzewo na stronie.

sposob 1:
  1. <?php
  2.  
  3. mysql_connect('localhost','test','test');
  4. mysql_select_db('anonsedb');
  5.  
  6. function show($res)
  7. {
  8.  
  9. $q="SELECT * FROM category WHERE parent_id = $res";
  10.  
  11. $result = mysql_query($q) or die(mysql_error());
  12. echo '<ul>';
  13. while($row = mysql_fetch_array($result))
  14. if($row['parent_id'] > 0)
  15. {
  16.  
  17. echo '<li><a href="index.php?name='.$row['name'].'">'.$row['name'].'</a></li>';
  18. show($row['id_category']);
  19. }
  20.  
  21. else
  22. echo '<li>'.$row['name'].'</li>';
  23.  
  24.  
  25. echo '</ul>';
  26. }
  27.  
  28. $q="SELECT * FROM category WHERE parent_id = 0";
  29. $result = mysql_query($q);
  30. echo '<ul>';
  31. while($row = mysql_fetch_array($result))
  32. {
  33. echo '<li><b><a href="index.php?name='.$row['name'].'">'.$row['name'].'</a></b></li>';
  34. echo show($row['id_category']);
  35. }
  36. echo '</ul>';
  37.  
  38.  
  39. ?>


sposob 2:
  1. <?php
  2.  
  3. mysql_connect('localhost','test','test');
  4. mysql_select_db('anonsedb');
  5.  
  6. function getAll ($query) {
  7. $res = mysql_query($query);
  8. $ret = array();
  9. if (!$res)
  10. return $ret;
  11. while ($r = mysql_fetch_assoc($res))
  12. $ret[] = $r;
  13. return $ret;
  14. }
  15.  
  16. function drzewoKategorii ($kategorie = null, $rodzicId = 0, $zaglebienie = 0, $wynik = null)
  17. {
  18. if ($wynik == null)
  19. $wynik = array();
  20. if ($kategorie == null) {
  21. $query = "select * from category order by parent_id, name";
  22. $kategorie = getAll($query);
  23. }
  24. foreach ($kategorie as $kat) {
  25. if ($r["parent_id"] == $rodzicId) {
  26. $r["zaglebienie"] = $zaglebienie;
  27. $wynik[] = $kat;
  28. $wynik = drzewoKategorii ($kategorie, $kat["id_category"], ($zaglebienie+1), $wynik);
  29. }
  30. }
  31. return $wynik;
  32. }
  33.  
  34. $drzewo = drzewoKategorii();
  35. foreach ($drzewo as $galaz) {
  36. for ($i=0; $i<=$galaz["zaglebienie"]; $i++) {
  37. echo '-';
  38. }
  39. echo $galaz["name"].'<br/>';
  40. }
  41.  
  42.  
  43. ?>


kody obu przykładów rozumiem w około 90%.

w sposobie 1 wyświetla mi drzewo bardzo ladnie ale nietety po wyswietleniu wszystkiego wywala mi blad i reszta strony nie laduje sie.

sposob 2 nie wyswietla mi drzewa (nie wiem czemu...) jednak jesli w index-ie dam include cat.php <-- plik z 1 sposobem, a do innej stronki powiedzmy ogloszenia.php wrzuce skrypt 2 dzieje sie bardzo dziwna rzecz. po zaladowaniu index.php wyswietla mi kategorie z bledem a po klikniecu odnosnika do ogloszenia.php wyswietla mi kategorie z 2 skryptu bardzo ladnie i bez bledu.

moje pytanie, ktory skrypt jest lepszy, i dlaczego 2 skrypt samodzielnie nie dziala a z 1 skryptem "z-includowanym" do indexu dziala?
Go to the top of the page
+Quote Post
sadistic_son
post 26.11.2010, 16:00:50
Post #2





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Cytat(fantaff @ 26.11.2010, 13:43:10 ) *
(...) wywala mi blad (...)
JAKI?!Wyobraź sobie, że istnieje więcej niż jeden rodzaj błędu, więc dość trudno jest zgadnąć który Tobie akurat się pojawia...


--------------------
Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami...

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc!
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Go to the top of the page
+Quote Post
fantaff
post 26.11.2010, 18:38:58
Post #3





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 26.11.2010

Ostrzeżenie: (0%)
-----


sorki faktycznie nie pomyslalem...

w kodzie źródłowym już po przejściu przez parser pokazuje sie cos takiego:

  1. <b>Fatal error</b>: Cannot redeclare show() (previously declared in C:\xampp\xampp\htdocs\www\glowna.php:6) in <b>C:\xampp\xampp\htdocs\www\glowna.php</b> on line <b>26</b><br />


caly plik glowna.php to przyklad 1. do tego momentu wszystko jest ok.
Go to the top of the page
+Quote Post
sadistic_son
post 26.11.2010, 18:43:12
Post #4





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Skoro wewnątrz funkcji show masz echo to nie możesz dać
  1. echo show($row['id_category']);
i to jeszcze w pętli. Daj to bez echo.


--------------------
Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami...

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc!
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Go to the top of the page
+Quote Post
fantaff
post 26.11.2010, 21:27:06
Post #5





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 26.11.2010

Ostrzeżenie: (0%)
-----


okej ciekawostka przyrodnicza...

dalem w index.php

include "glowna.php";

jesli wejde na localost/index.php to wszystko jest wyswietlane bardzo ladnie zadnych bledow. w indexie mam zrobione menu:
  1. <?php
  2. include("glowna.php");
  3. if($_GET["menu"]=="glowna"){
  4. include("glowna.php");
  5. }else if ($_GET["menu"]=="dodaj"){
  6. include("dodaj.php");
  7. }else if ($_GET["menu"]=="rejestracja"){
  8. include("rejestracja.php");
  9. }else if ($_GET["menu"]=="logowanie"){
  10. include("logowanie.php");
  11. }else{
  12. echo "";
  13. }
  14. ?>


jesli klikne na Strona glowna -> glowna.php to nadal jest ten blad... jak moze ten sam kod na jednej stronie wywolywac blad a na innej nie? zawsze spotykalem sie z przypadkami ze albo cos dziala albo nie... i sorki za problem.

edit

ekhm... usunalem include "glowna.php" z indexu i teraz kiedy klikne na link do glowna.php to wszystko jest ok. dlaczego tak sie dzieje?

Ten post edytował fantaff 26.11.2010, 21:29:22
Go to the top of the page
+Quote Post
sadistic_son
post 27.11.2010, 01:12:42
Post #6





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Odpowiedz jest prosta - jesli klikniesz w Strone Glowna to znow deklarujesz funkcje show() dwa razy. W powyzszym kodzie includujesz glowna.php bez wzgledu na to co sie wybralo. Funkcja show jest deklarowana pierwszy raz. Jesli wybierzesz cokolwiek innego niz Strona Glowna wszystko jst ok bo nie includujesz drugi raz glowna.php. Natomiast jesli GET['menu'] jest rowne "glowna", czyli kliknales w Strona Glowna to znow includujesz glowna.php i deklarujesz funkcje show jeszcze raz. Wywal include("glowna.php"); z linijki 2 i wszystko bedzie ok.
Pomoglem? winksmiley.jpg

Ten post edytował sadistic_son 27.11.2010, 01:13:33


--------------------
Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami...

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc!
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Go to the top of the page
+Quote Post
marcio
post 27.11.2010, 01:58:15
Post #7





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Jesli importujesz sobie jakies potrzebne funkcje uzyj include_once/require_once zamiast include/require i po problemie winksmiley.jpg


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.07.2025 - 11:21