Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php][mysql]menu
alfi1986
post
Post #1





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 3.04.2008

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


Witajcie z rozwijanym menu nie moge dać sobie rady więc może menu zwykłe

level1
...level2
...level2
level1
...level2

Takie menu jak zrobić coś mi nie idzie z zagnieżdzaniem pętli i if
mam coś takiego. i walcze

  1. <?php
  2. $sql2 = &#092;"SELECT * FROM `lewemenu`\";
  3. $q2 = mysql_query($sql2); 
  4. $sql6 = 'SELECT * FROM `lewemenu` ORDER BY `lewemenu` . `przylewe` ASC';
  5.  $q6 = mysql_query($sql6); 
  6.  
  7.  while ($wiersz1 = mysql_fetch_row($q2)) {
  8.  if (($_GET['id'] == $wiersz1[1])) {
  9.  if ($wiersz1[0] == $wiersz1[4]) {
  10. echo '<li id=\"current\"><a id=\"current\" href=produkty.php?main='.$wiersz1[3].'&id='.$_get['id'].'&zakladka='.$_get['zakladka'].'&przylewe='.$wiersz1[0].'>'.$wiersz1[2].'';
  11. }else{
  12. while ($wiersz2 = mysql_fetch_row($q6)) {
  13. echo $wiersz2[0];
  14. }
  15. }
  16. }else{
  17. }
  18.  }
  19. ?>

id id_strony_zakladka tytyl main przylewe naglu
1 2 Software 1 1 1
2 2 Hardware 2 2 1
4 2 testowkakk 101 1 0
3 2 Q-DIRECT 100 2 0

Ten post edytował Cysiaczek 7.04.2008, 07:45:26
Powód edycji: dodalem tagi (cysiaczek)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 19)
isso
post
Post #2





Grupa: Zarejestrowani
Postów: 296
Pomógł: 32
Dołączył: 3.01.2005

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


To może spróbuj coś takiego:

Masz powiedzmy baze i w niej podane są kategorie oraz poziom tj:

Hardware lvl1
Dyski lvl2
Software lvl1
Systemy lvl2
Grafika lvl2

i wtedy wyciagajac z bazy sprawdzasz na którym poziomie jest dana kategoria... i wykonujesz odpowiednie operacje wcięć czy czego tam też chcesz:)


a tak poza tym nie do końca wiadomo co wyciagasz z bazy i jak to chcesz ułożyć... napisz bardziej szczegółowo..
Go to the top of the page
+Quote Post
alfi1986
post
Post #3





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 3.04.2008

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


nie rozumiem tego jeżeli napisze coś takiego
  1. <?php
  2. while ($wiersz1 = mysql_fetch_row($q2)) {
  3. if (($_GET['id'] == $wiersz1[1])) {
  4. if ($wiersz1[0] == $wiersz1[4]) {
  5.  echo '<li id="current"><a id="current" href=produkty.php?main='.$wiersz1[3].'&id='.$_GET['id'].'&zakladka='.$_GET['zakladka'].'&przylewe='.$wiersz1[0].'>'.$wiersz1[2].'</a></li>';
  6.  
  7.  
  8.  }else{
  9.  if (($wiersz1[5] == 0)) {
  10. echo '<div id="sub2levelContainer"><ul id="sub2level">';
  11. //echo "<li><a href="."produkty.php"."?main=".$wierszr[3]."&id=".$_GET['id']."&zakladka=".$_GET['zakladka'].'&przylewe='.$wierszl[0]."&zakladka1=".$_GET['zakladka1']."&zakladka2=".$wierszr[2].">".$wierszr[2].'</a></li>';
  12. echo $wiersz1[0];
  13. echo '</ul></div>';
  14. }
  15.  }  
  16.  }
  17.  }
  18. ?>


To on nie jdzie po kolei??czyli sprawdza pierwszy warunek potem jeżeli jest prawdziwy przechodzi do następnego jeżeli jest prawdziwy wypisuje leve1 przechodzi do else i wypisuje te nieprawdziwe czyli level2.... a on w praktyce działa tak że wypisuje

lvl1
lvl1
lvl2
lvl2

ktoś mi to wytłumaczy bo ja tego nie rozumiem
Go to the top of the page
+Quote Post
EdeusEx
post
Post #4





Grupa: Zarejestrowani
Postów: 49
Pomógł: 1
Dołączył: 6.04.2008

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


Możesz podać strukturę Twojej tabeli?
Go to the top of the page
+Quote Post
alfi1986
post
Post #5





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 3.04.2008

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


id id_strony_zakladka tytyl........ main przylewe naglu
1............2..............Software ....1 .......1........ 1
2 ...........2............. Hardware ... 2....... 2........ 1
4 ...........2............. testowkakk . 101.... 1....... 0
3 ...........2............. Q-DIRECT ... 100..... 2...... 0
Go to the top of the page
+Quote Post
isso
post
Post #6





Grupa: Zarejestrowani
Postów: 296
Pomógł: 32
Dołączył: 3.01.2005

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


hmmm z tego co rozumiem to $wiersz1[5] przechowuje naglowek czyli Twoj Level tak ?

jeżeli tak - to proste rozwiazanie:

  1. <?php
  2. if($wiersz1[5] == '1'){
  3.  
  4. cos tam;
  5.  
  6. }
  7. else
  8. {
  9.  
  10. cos innego;
  11. }
  12. ?>


bo własciwie innego problemu chyba nie ma? W ten sposób utworzą się wcięcia... czy co tam chcesz za pomocą odpowiednich tagów...

a tak poza tym, to troche skoplikowana ta cała procedura - wydaje mi się, że lepiej się odnosić do nazw, a nie do indeksów.. są bardziej czytelne.... no i oczywiscie ;] kompletny brak komentarza w kodzie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) trzeba sie wszystkiego domyślać ;] a to źle ;-)
Go to the top of the page
+Quote Post
alfi1986
post
Post #7





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 3.04.2008

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


Bardzo mi pomagasz zaraz to zmienie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

stworzyłem coś takiego (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

i jednej małej kwesti mi brakuje miejsa wypisywania naglowkow....
  1. <?php
  2. function menulewe()
  3. { // begin function menulewe
  4. $sql2 = "select * from `lewemenu`";
  5. $q2 = mysql_query($sql2); 
  6. $sql6 = 'select * from `lewemenu` order by `lewemenu` . `przylewe` asc';
  7.  $q6 = mysql_query($sql6); 
  8. while ($wierszl = mysql_fetch_row($q2)) {
  9. //sprawdza czy dane elementy menu sa w danej zakladce menu gornego
  10. if ($_get['id'] == $wierszl[1]) {
  11. // tutaj wymyslilem sobie ze bede wpisywal w tabeli ze bedzie sprawdzal czy id jest rowne przyleve(przypisanie do dabego lvl1)
  12.  if (($wierszl[0] == $wierszl[4]) ) {
  13.  //wypisanie lvl1
  14. echo '<li id="current"><a id="current" href=produkty.php?main='.$wierszl[3].'&id='.$_get['id'].'&zakladka='.$_get['zakladka'].'&przylewe='.$wierszl[0].'>'.$wierszl[2].'</a></li>'; 
  15.  // tutaj chcial bym zeby wypisywal dane do danego lvl1 czyli lvl2
  16. while ($wierszr = mysql_fetch_row($q6)) {
  17. if (($wierszr[5] == 0) and ($_get['przylewe'] == $wierszr[4]) and ($_get['id'] == $wierszl[1] )) {
  18.  echo '<div id="sub2levelcontainer">
  19. <ul id="sub2level">';
  20.  echo "<li><a href="."produkty.php"."?main=".$wierszr[3]."&id=".$_get['id']."&zakladka=".$_get['zakladka'].'&przylewe='.$wierszl[0]."&zakladka1=".$_get['zakladka1']."&zakladka2=".$wierszr[2].">".$wierszr[2].'</a></li>';
  21.  echo '</ul></div>';
  22.  }else{
  23.  }
  24.  
  25.  
  26. }
  27. }else{
  28. }
  29. }else{
  30. }
  31. } // end function menulewe
  32. }
  33. ?>


problem jest taki ze tekst zawsze wyswietli sie pod 1 lvl1
czyli tak
lvl1
lvl2
lvl2
lvl2
lvl1

więc jak zmienić ten skrypt zeby wypisywal napoczatku naglowek potem przynalezne do niego naglowki jezeli nie jest przekazany parametr to lvl2 jest nie widoczny
czyli
lvl1
...lvl2
...lvl2
lvl1
...lvl2
...lvl2
Go to the top of the page
+Quote Post
EdeusEx
post
Post #8





Grupa: Zarejestrowani
Postów: 49
Pomógł: 1
Dołączył: 6.04.2008

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


Użyj zamiast mysql_fetch_row funkcji mysql_fetch_assoc i indeksy pozmieniaj na nazwy. Naprawdę, to w jakims stopniu pomoze nam pomóc Ci do samego końca.
Go to the top of the page
+Quote Post
isso
post
Post #9





Grupa: Zarejestrowani
Postów: 296
Pomógł: 32
Dołączył: 3.01.2005

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


Wiec tak... przede wszystkim dalej wydaje mi sie, ze nie zastosowałes podziału na sprawdzanie który jest lvl....

zakładam, ze w tabeli masz rekordy poukładane, czyli:

A lvl 1
..A.A lvl2
..A.B lvl2
..A.C lvl2
B lvl 1
..B.A lvl2
..B.B lvl2
itd.

Wiec Twoja petla powinna robic tak:

  1. <?php
  2. if(Jakieś Twoje Warunki && sprawdzenie lvl){
  3.  
  4. jesli lvl 1 to tu sie pojawia cos;
  5.  
  6. }
  7. else
  8. {
  9.  
  10. jesli lvl 2 to to tu sie pojawia cos innego (czyli Twoje wciecie ... ten cały sub2levelcont...);
  11.  
  12. }
  13. ?>


poza tym... źle jest używać zmiennych $wierszr $wierszl... bo nie wiadomo co ijak... i gdzie to sie zmienia... roznica powinna byc bardziej widoczna...

W ten sposób czytajac z bazy skrypt bedzie wypisywał tak jak chcesz.... inaczej ciezko cokolwiek jest powiedzieć....
Go to the top of the page
+Quote Post
alfi1986
post
Post #10





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 3.04.2008

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


nie działa do końca bo znikło mi całe menu...

czy moj skrypt dziala tak jak mysle...albo jak bym chciał
1.sprawdza czy dana pozycja jest naglowiek
jezeli tak wypisuje ja
2.przechodzi do kolejnego wiersza w ktorym mamy petle while ktora wyszukuje poszczegulne elementy ktore naleza do danego naglowka i wypisuje je
3.wszystko wraca do poczatku znowu sprawdzenie czy kolejny rekord jest naglowiek czy nie...
wreszcie trafia na kolejny wiec wypisuje kolejny wpada do while i wypisuje pasujace do niego lvl2

i wszystko powinno wygladac tak po otwarciu

lvl1 ng1
lvl1 ng2

po nacisnieciu na lvl1 ng1

lvl1 ng1
...lvl2 tekst1
...lvl2 tekst1
lvl1 ng2

analogicznie do ng2


lvl1 ng1
lvl1 ng2
...lvl2 tekst1
...lvl2 tekst1


czy sie myle
Go to the top of the page
+Quote Post
isso
post
Post #11





Grupa: Zarejestrowani
Postów: 296
Pomógł: 32
Dołączył: 3.01.2005

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


Możliwe, że masz gdzies błedy w zapytaniach - rozpisze jak to powinno wygladać:

  1. <?php
  2. pytanieA = pokaz wszystkie rekordy gdzie level = 1;
  3. pytanieB = pokaz wszystkie rekordy gdzie level = 2;
  4.  
  5. while(pytanieA(pytanieA zwraca swoj indeks)) {
  6.  
  7. sprawdz czy ID jest taki sam jak z linku;
  8. jezeli tak to wypisz link na poziomi lvl1;
  9. jezeli nie - nic sie nie dzieje;
  10.  
  11. while(pytanieB){
  12. zwracane sa wszystkie wartosci z B wiec sprawdzasz czy indeks z pytania 
  13. A jest jest przypisany do tej pozycji i jesli tak to wypisujesz go;
  14. jesli nie to nic sie nie dzieje;
  15. }
  16. }
  17. ?>


w ten sposób zostaną CI zwrócone wszystkie wartości (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) jakich potrzebujesz...

Ten post edytował isso 6.04.2008, 22:02:17
Go to the top of the page
+Quote Post
alfi1986
post
Post #12





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 3.04.2008

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


Zgadza sie wyszedłem na chwile do sklepu i przeanalizowałem skrypt i działa tak jak jest zapisany...
Więc biore sie do napisania tego co napisaliście... dam znać za kilkanaście minut jak skoncze

napisalem tak jak mowiles i nie dziala bo nie chce nie wiem czemu wyswietlic mi wartosci przypisanych do 2 lvl1, natomiast dla 1 lvl1 wypisuje swietnie.Dlaczego właśnie kminie.
  1. <?php
  2. $zapytanie = "SELECT * FROM `lewemenu` WHERE `lvl`='1'";
  3. $q = mysql_query($zapytanie);
  4. $zapytanie2 = "SELECT * FROM `lewemenu` WHERE `lvl`='2'";
  5. $q2 = mysql_query($zapytanie2);
  6. while ($lvl1 = mysql_fetch_row($q)) {
  7. //if ($_GET['id'] == $lvl1[1]) {
  8. //echo $lvl1[0];
  9.  echo '<li id="current"><a id="current" href=produkty.php?main='.$lvl1[3].'&id='.$_GET['id'].'&zakladka='.$_GET['zakladka'].'&przylewe='.$lvl1[0].'>'.$lvl1[2].'</a></li>';
  10. //}
  11. while($lvl2 = mysql_fetch_row($q2)){
  12. if ($lvl1[0] == $lvl2[4]) {
  13. echo '<div id="sub2levelContainer"><ul id="sub2level">';
  14. echo "<li><a href="."produkty.php"."?main=".$lvl2[3]."&id=".$_GET['id']."&zakladka=".$_GET['zakladka'].'&przylewe='.$lvl2[0]."&zakladka1=".$_GET['zakladka1']."&zakladka2=".$lvl2[2].">".$lvl2[2].'</a></li>';
  15. echo '</ul></div>'; 
  16. }
  17. }
  18. }
  19. ?>
Go to the top of the page
+Quote Post
isso
post
Post #13





Grupa: Zarejestrowani
Postów: 296
Pomógł: 32
Dołączył: 3.01.2005

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


Wiesz co... stwótrz kontrolne zmienne, które przy każdym wyświetleniu pętli będzie wypisywało jakie wartości przyjmują konkretne zmienne, a wtedy łatwiej bedzie skminić gdzie jest bład...

widzisz... cieżko mi operować na samym kodzie... bo sama idea jest poprawna...
Go to the top of the page
+Quote Post
alfi1986
post
Post #14





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 3.04.2008

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


co post jestem coraz blizej celu by zrobic to menu a mam na dzis zeby je zrobic przed snem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
wiec dzialam

a moge mieć jakiś błąd w sql (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
isso
post
Post #15





Grupa: Zarejestrowani
Postów: 296
Pomógł: 32
Dołączył: 3.01.2005

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


Tak jak napisałem, ustaw zmienne kontrolne w obrębie drugiego While, które beda wypisywać wartości... i wtedy wszystko bedize jasne... co sie dzieje... i tak jak już pisałem, pozamieniaj np
  1. <?php
  2. $lvl1[1] na $lvl1['cos']
  3. ?>
bedzie łatwiej czytać o co chodzi w skrypcie... i co sie wykonuje...
Go to the top of the page
+Quote Post
alfi1986
post
Post #16





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 3.04.2008

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


zmieniłem żeby sprawdzał po nazwie. i nic dupa... nadal to samo nie wypisuje dla 2pozycji lvl2 jego lvl1 ale dlaczego??
  1. <?php
  2. $zapytanie = &#092;"SELECT * FROM `lewemenu` WHERE `lvl`='1'\";
  3. $q = mysql_query($zapytanie);
  4. $zapytanie2 = &#092;"SELECT * FROM `lewemenu` WHERE `lvl`='2'\";
  5. $q2 = mysql_query($zapytanie2);
  6. while ($lvl1 = mysql_fetch_row($q)) {
  7.  echo '<li id=\"current\"><a id=\"current\"href=produkty.php?main='.$lvl1[3].'&id='.$_get['id'].'&zakladka='.$_get['zakladka'].'&przylewe='.$lvl1[0].'>'.$lvl1[2].'';
  8. while($lvl2 = mysql_fetch_row($q2)){
  9. if ($lvl1[2] == $lvl2[4]) {
  10. echo '<div id=\"sub2levelcontainer\"><ul id=\"sub2level\">';
  11. echo &#092;"<a href=\".\"produkty.php\".\"?main=\".$lvl2[3].\"&id=\".$_get['id'].\"&zakladka=\".$_get['zakladka'].'&przylewe='.$lvl2[0].\"&zakladka1=\".$_get['zakladka1'].\"&zakladka2=\".$lvl2[2].\">\".$lvl2[2].'</a href=\".\"produkty.php\".\"?main=\".$lvl2[3].\"&id=\".$_get['id'].\"&zakladka=\".$_get['zakladka'].'&przylewe='.$lvl2[0].\"&zakladka1=\".$_get['zakladka1'].\"&zakladka2=\".$lvl2[2].\">';
  12. echo ''; 
  13. }
  14. }
  15. }
  16. ?>


mi to wyglada tak jak by on wypisywał
1lvl1
potem
1lvl2
2lvl2
potem
2lvl1
3lvl1
bez wykonania srodkowego while dla 2lvl1 i 3lvl1

  1. <?php
  2. function menulewe()
  3. { // BEGIN function menulewe
  4. $zapytanie = &#092;"SELECT * FROM `lewemenu` WHERE `lvl`='1'\";
  5. $q = mysql_query($zapytanie);
  6. $zapytanie2 = &#092;"SELECT * FROM `lewemenu` WHERE `lvl`='2'\";
  7. $q2 = mysql_query($zapytanie2);
  8. while ($lvl1 = mysql_fetch_row($q)) {
  9. //if ($_GET['id'] == $lvl1[1]) {
  10. echo $lvl1[2].&#092;"  lvl1
  11. &#092;";
  12.  //echo '<li id=\"current\"><a id=\"current\" href=produkty.php?main='.$lvl1[3].'&id='.$_get['id'].'&zakladka='.$_get['zakladka'].'&przylewe='.$lvl1[0].'>'.$lvl1[2].'';
  13. //}
  14. while($lvl2 = mysql_fetch_row($q2)){
  15. echo $lvl2[2].&#092;" lvl2
  16. &#092;";
  17. //echo '<div id=\"sub2levelcontainer\"><ul id=\"sub2level\">';
  18. //echo \"<li><a href=\".\"produkty.php\".\"?main=\".$lvl2[3].\"&id=\".$_get['id'].\"&zakladka=\".$_get['zakladka'].'&przylewe='.$lvl2[0].\"&zakladka1=\".$_get['zakladka1'].\"&zakladka2=\".$lvl2[2].\">\".$lvl2[2].'</a href=\".\"produkty.php\".\"?main=\".$lvl2[3].\"&id=\".$_get['id'].\"&zakladka=\".$_get['zakladka'].'&przylewe='.$lvl2[0].\"&zakladka1=\".$_get['zakladka1'].\"&zakladka2=\".$lvl2[2].\">';
  19. //echo ''; 
  20. }
  21. } 
  22. }
  23. ?>


taki kod zwraca mi

Software lvl1
tyt2 lvl2
tyt1 lvl2
Hardware lvl1
Systemy lvl1

a powinno byc
tyt2 lvl2
tyt2 lvl2
Hardware lvl1
tyt2 lvl2
tyt2 lvl2
Systemy lvl1
tyt2 lvl2
tyt2 lvl2

Ten post edytował alfi1986 6.04.2008, 23:28:15
Go to the top of the page
+Quote Post
isso
post
Post #17





Grupa: Zarejestrowani
Postów: 296
Pomógł: 32
Dołączył: 3.01.2005

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


jezeli nie wykonuje 2lv1 i 3lv1 to znaczy, ze w odpowiedzi na drugie zapytanie nie otrzymał danych, które by pasowały...
Go to the top of the page
+Quote Post
alfi1986
post
Post #18





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 3.04.2008

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


jak to naprawić.. bo on nie widzi danych dla 2 przelecenia przez petle...
Go to the top of the page
+Quote Post
isso
post
Post #19





Grupa: Zarejestrowani
Postów: 296
Pomógł: 32
Dołączył: 3.01.2005

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


a spróbuj tą czesc

  1. <?php
  2. $zapytanie2 = &#092;"SELECT * FROM `lewemenu` WHERE `lvl`='2'\";
  3. $q2 = mysql_query($zapytanie2);
  4. ?>


wstawić do pierwszego while

i obadaj co wtedy sie stanie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
alfi1986
post
Post #20





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 3.04.2008

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


DZIAŁA!!!!!!!!!
łał (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) jesteś wielki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 17:45