Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] nawigacja w php dla galerii zdjęć
Forum PHP.pl > Forum > Przedszkole
tiko35
staram sie zrobić nawigacje dla zdjęć, czyli przycisk "<<back" oraz przycisk "next>>"
Sortowanie mam na stronie po dacie dodania, więc robie tak:
  1. $prev = "SELECT id,nazwa,plik,id_kategorii,id_miejsca,id_daty,tytul,dodano FROM zdjecie WHERE id_kategorii=$id_kat AND dodano >'$dodano' LIMIT 1";
  2. $next = "SELECT id,nazwa,plik,id_kategorii,id_miejsca,id_daty,tytul,dodano FROM zdjecie WHERE id_kategorii=$id_kat AND dodano <'$dodano' LIMIT 1";
  3.  

i mam już w zaleznosci od bierzącego "dodano" dwa zapytania, dalej robie tak:
  1. echo '<div id="duze_zdjecie"><a href="index.php?nr=drug&id_kat='.$_GET['id_kat'].'"><img src="'.$images_dir.'/'.$_GET['plik'].'" border="0" /></a><div class="napis_duze">'.$_GET['tytul'].'</div></div>';
  2. $rezultat = mysqli_query($dbc,$next);
  3. $rezultat2 = mysqli_query($dbc,$prev);
  4. while($spr = mysqli_fetch_array($rezultat))
  5. {
  6. echo "<div class='nastepna'><a href='index.php?dodano={$spr['dodano']}&glob={$_GET['glob']}&plik={$spr['plik']}&nazwa={$spr["nazwa"]}&id_kat={$spr['id_kategorii']}&id_mie={$spr['id_miejsca']}&id_dat={$spr['id_daty']}&id=".$spr['id']."'>Następne&gt;&gt;</a></div>";
  7. }
  8. while($spr = mysqli_fetch_array($rezultat2))
  9. {
  10. echo "<div class='poprzednia'><a href='index.php?dodano={$spr['dodano']}&glob={$_GET['glob']}&plik={$spr['plik']}&nazwa={$spr["nazwa"]}&id_kat={$spr['id_kategorii']}&id_mie={$spr['id_miejsca']}&id_dat={$spr['id_daty']}&id=".$spr['id']."'>&lt;&lt;Poprzednie</a></div>";
  11. }

no ale niestety niedziala to dobrze, problemem pewnie tu sa dwie pętle while, jak ustalić jednoczesnie "back" i "next", tak zeby po przewinieciu na nastepne zdjecie zostały znowu ustalone nastepne next i back...
jesli ktoś mogłby pomoc bede wdzieczny, niby zapytania są dobre, tylko jak to wyswietlic i zsynchronizowac ;/
thek
A to nie prościej zrobić to bez pętli? Zapytanie główne i dwa zapytania dodatkowe wyciągające Ci sąsiednie rekordy. Brak któregoś z sąsiednich to brak wyświetlania Prev lub Next. Pętle przy wyciąganiu pojedynczych rekordów są zbędne. Sprawdzasz tylko czy wartość zwrócona z bazy zawiera rekord i jeśli tak - wyświetlasz.
tiko35
starałem się zrobić bez pętli tak jak napisałeś, ale nic dobrego z tego nie wyszło,
załóżmy klikne na drugie zdjęcie w kolejności, to po powiekszeniu go, pojawiają sie przyciski back i next, czyli prawidłowo. Wybierając back, przenosi mnie do pierwszego zdjecia z kolei czyli równiez prawidłowo ale wtedy znika cała nawigacjai komunikaty o błędach:
Cytat
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in D:\usr\galeria\nawigacja_wysw.php on line 20

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in D:\usr\galeria\nawigacja_wysw.php on line 20

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in D:\usr\galeria\nawigacja_wysw.php on line 20

I tak sie dzieje cały czas gdy daje "back" przy kazdym zdjeciu, czyli poprzednie zdjęcie wyswietla się prawidłowo, ale znika nawigacja i pojawiają się komunikaty jak powyżej. Jeśli zaś chodzi o przycisk next, to on wogole nie działa prawidłowo, niezaleznie na które zdjecie z kolei bym nie kliknął, i dał next to i tak wyswietla mi sie jedno i to samo zdjęcie i dalej przycisku next juz nie ma. Prosiłbym o pomoc, i ewentualne wskazanie błędów.

oto kod zmieniony:
  1. $obec = "SELECT id,nazwa,plik,id_kategorii,id_miejsca,id_daty,tytul,dodano FROM zdjecie WHERE id_kategorii=$id_kat AND dodano ='$dodano' LIMIT 1";
  2. $prev = "SELECT id,nazwa,plik,id_kategorii,id_miejsca,id_daty,tytul,dodano FROM zdjecie WHERE id_kategorii=$id_kat AND dodano >'$dodano' LIMIT 1";
  3. $next = "SELECT id,nazwa,plik,id_kategorii,id_miejsca,id_daty,tytul,dodano FROM zdjecie WHERE id_kategorii=$id_kat AND dodano <'$dodano' LIMIT 1";
  4. //nawigacja_test2($prev,$next,"nr=drug&id_kat=".$_GET['id_kat']."&dodano=\"$dodano\"");
  5. //$_GET['nazwa'] = strip_tags(stripslashes($_GET['nazwa']));
  6. // $_GET['tytul'] = strip_tags(stripslashes($_GET['tytul']));
  7. $obecne = mysqli_query($dbc,$obec);
  8. $rezultat2 = mysqli_query($dbc,$prev);
  9. $rezultat = mysqli_query($dbc,$next);
  10. $ob = mysqli_fetch_array($obecne); $poprz = mysqli_num_rows($rezultat2); $nast = mysqli_num_rows($rezultat);
  11. echo '<div id="duze_zdjecie"><a href="index.php?dodano='.$ob['dodano'].'&nr=drug&id_kat='.$_GET['id_kat'].'"><img src="'.$images_dir.'/'.$_GET['plik'].'" border="0" /></a><div class="napis_duze">'.$_GET['tytul'].'</div></div>';
  12. if($poprz > 0)
  13. {
  14. $p = mysqli_fetch_array($rezultat2);
  15. echo "<div class='poprzednia'><a href='index.php?dodano={$p['dodano']}&glob={$_GET['glob']}&plik={$p['plik']}&nazwa={$p["nazwa"]}&id_kat={$spr['id_kategorii']}&id_mie={$p['id_miejsca']}&id_dat={$p['id_daty']}&id=".$p['id']."'>&lt;&lt;Poprzednie</a></div>";
  16. }
  17. if($nast > 0)
  18. {
  19. $n = mysqli_fetch_array($rezultat);
  20. echo "<div class='nastepna'><a href='index.php?dodano={$n['dodano']}&glob={$_GET['glob']}&plik={$n['plik']}&nazwa={$n["nazwa"]}&id_kat={$n['id_kategorii']}&id_mie={$n['id_miejsca']}&id_dat={$n['id_daty']}&id=".$n['id']."'>Następne&gt;&gt;</a></div>";
  21. }
thek
  1. $obec = "SELECT id,nazwa,plik,id_kategorii,id_miejsca,id_daty,tytul,dodano FROM zdjecie WHERE id_kategorii=$id_kat AND dodano ='$dodano' LIMIT 1";
  2. $prev = "SELECT id,nazwa,plik,id_kategorii,id_miejsca,id_daty,tytul,dodano FROM zdjecie WHERE id_kategorii=$id_kat AND dodano >'$dodano' LIMIT 1";
  3. $next = "SELECT id,nazwa,plik,id_kategorii,id_miejsca,id_daty,tytul,dodano FROM zdjecie WHERE id_kategorii=$id_kat AND dodano <'$dodano' LIMIT 1";
  4. $obecne = mysqli_query($dbc,$obec);
  5. $previous = mysqli_query($dbc,$prev);
  6. $after = mysqli_query($dbc,$next);
  7. if( $previous AND mysqli_num_rows( $previous ) ) {
  8. $p = mysqli_fetch_array($previous);
  9. echo "<div class='poprzednia'><a href='index.php?dodano={$p['dodano']}&glob={$_GET['glob']}&plik={$p['plik']}&nazwa={$p['nazwa']}&id_kat={$spr['id_kategorii']}&id_mie={$p['id_miejsca']}&id_dat={$p['id_daty']}&id=".$p['id']."'><<Poprzednie</a></div>";
  10. }
  11.  
  12. if( $obecne AND mysqli_num_rows( $obecne ) ) {
  13. $ob = mysqli_fetch_array($obecne);
  14. echo '<div id="duze_zdjecie"><a href="index.php?dodano='.$ob['dodano'].'&nr=drug&id_kat='.$_GET['id_kat'].'"><img src="'.$images_dir.'/'.$_GET['plik'].'" border="0" /></a><div class="napis_duze">'.$_GET['tytul'].'</div></div>';
  15. }
  16. if( $after AND mysqli_num_rows( $previous ) ) {
  17. $n = mysqli_fetch_array($rezultat);
  18. echo "<div class='nastepna'><a href='index.php?dodano={$n['dodano']}&glob={$_GET['glob']}&plik={$n['plik']}&nazwa={$n['nazwa']}&id_kat={$n['id_kategorii']}&id_mie={$n['id_miejsca']}&id_dat={$n['id_daty']}&id=".$n['id']."'>Następne>></a></div>";
  19. }
Tylko brakuje jeszcze filtrowania danych z GET... i sensowniej jakoś bym się zajął tym adresem... Po kiego tyle danych w adres pchać, skoro wystarczy id, a resztę można do bazy walnąć? Tylko sobie komplikujesz życie. Inna sprawa, że skakanie w echo między ' a " tylko Sprawia, że się gubisz kiedy którego używać, a kiedy go escape'wać. Mi się już tego nie chciało bardziej poprawiać więc zostawiłem jak było, tylko ewidentne błędy poprawiłem by działało, a przynajmniej powinno działać.
tiko35
wielkie wielkie dzięki:)
tak analizuje kod i wynika z tego że błędem było to że nie ujęłem w if czy zapytanie się przetworzy tak jak mi pokazałeś.
Dodatkowo znalazłem błąd, który odpowiada za wyświetlanie next: błąd był w zapytaniu, trzeba było dodać jeszcze odpowiednie porządkowanie dla NEXT czyli:
  1. $next = "SELECT id,nazwa,plik,id_kategorii,id_miejsca,id_daty,tytul,dodano FROM zdjecie WHERE id_kategorii=$id_kat AND dodano <'$dodano' ORDER BY dodano DESC LIMIT 1";

A tyle danych z GET, to problem mojej strony, ponieważ wszystko przez menu, które zarazem robi za wyszukiwarkę(całe menu wczytywane z bazy, dodatkowo kazda pozycja filtrowana, aż do 8 poziomu) przez to musiałem przesyłać tyle zmiennych metodą GET, aby wiedzieć, którą pozycje menu wyświetlić,no i to sie automatycznie przeniosło tu na nawigację..
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.