Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql]menu
Forum PHP.pl > Forum > Przedszkole
alfi1986
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
isso
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..
alfi1986
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
EdeusEx
Możesz podać strukturę Twojej tabeli?
alfi1986
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
isso
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 smile.gif trzeba sie wszystkiego domyślać ;] a to źle ;-)
alfi1986
Bardzo mi pomagasz zaraz to zmienie smile.gif

stworzyłem coś takiego 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
EdeusEx
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.
isso
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ć....
alfi1986
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
isso
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 smile.gif jakich potrzebujesz...
alfi1986
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. ?>
isso
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...
alfi1986
co post jestem coraz blizej celu by zrobic to menu a mam na dzis zeby je zrobic przed snem smile.gif
wiec dzialam

a moge mieć jakiś błąd w sql questionmark.gif
isso
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...
alfi1986
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
isso
jezeli nie wykonuje 2lv1 i 3lv1 to znaczy, ze w odpowiedzi na drugie zapytanie nie otrzymał danych, które by pasowały...
alfi1986
jak to naprawić.. bo on nie widzi danych dla 2 przelecenia przez petle...
isso
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 smile.gif
alfi1986
DZIAŁA!!!!!!!!!
łał biggrin.gif jesteś wielki 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.