Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zmienne
Forum PHP.pl > Forum > PHP
darex
Cześć, jestem tu nowy więc prosze o wyrozumiałość. Wiem co znaczy wujek google, szukajka ... itp.
Znam HTML, CSS, JS i od jakiegos czasu PHP.

Mam taki problem, chciałbym, zrobić w galerii odsyłacze "poprzedni" i "następny".
Wszystkie obrazki w gallery/index.php mają odsyłacz, który pobiera nazwe pliku:

  1. <?php
  2. $directory="images/";
  3. $dir=opendir($directory);
  4.  
  5. while($file_name=readdir($dir))
  6.   {
  7.  
  8.   if(($file_name!=".")&&($file_name!=".."))
  9.       {
  10.       $file_list.="<a href=\"http://dariuszsajdak.pl/gallery/foto.php?id=$file_name\"><img src=\"images/$file_name\" alt=\"Zdjęcie\" width=\"20%\" height=\"20%\" style=\"margin: 5px;\" /></a>";
  11.       }
  12.   }
  13.  
  14. closedir($dir);
  15. echo ''.$file_list.' <br />';
  16.  
  17. ?>


Gdy kliknę w którys obrazek to otwiera mi sie strona np:
http://dariuszsajdak.pl/gallery/foto.php?id=image-11.jpg
A w niej te odsyłacze i pod nimi obrazek. Wszysko jest ładnie do tej pory. Chcę, gdy jak klikne w poprzedni otwarła mi się strona (w tym przypadku):
http://dariuszsajdak.pl/gallery/foto.php?id=image-10.jpg
A jak klikne w następny to:
http://dariuszsajdak.pl/gallery/foto.php?id=image-12.jpg
Mysle że zrozumiale napisałem. Próbowałem wiele sposobów ale niestety pokasowałem je a i tak nie wychodziły.
Możliwe że w kodzie będzie wiele błędów.
vonski
Na stronie foto.php pobierasz przez $_GET nazwę aktualnie wyświetlanego zdjęcia, później string przechowujący nazwę "rozwalasz" na tablicę przy użyciu explode(), zwiększasz (i zmniejszasz) numer zdjęcia o jeden, a potem wszystko łączysz znowu do strigna:

  1. <?php
  2. $str = $_GET["id"];
  3.  
  4. $arr_p = explode("-", $str);
  5. $arr_p[1] = str_ireplace(".jpg", "", $arr_p[1]);
  6. $arr_n = $arr_p;
  7. $arr_p[1]--;
  8. $arr_n[1]++;
  9.  
  10. $str_prev = implode("-", $arr_p) . ".jpg";
  11. $str_next = implode("-", $arr_n) . ".jpg";
  12. ?>


I w tym momencie zakładając że string wejściowy miał wartość np. "image-14.jpg" to dwa wynikowe stringi mają odpowiednio: "image-13.jpg" i "image-15.jpg".
darex
  1. <?php
  2. $str = $_GET["id"];
  3.  
  4. $arr_p = explode("-", $str);
  5. $arr_p[1] = str_ireplace(".jpg", "", $arr_p[1]);
  6. $arr_n = $arr_p;
  7. $arr_p[1]--;
  8. $arr_n[1]++;
  9.  
  10. $str_prev = implode("-", $arr_p) . ".jpg";
  11. $str_next = implode("-", $arr_n) . ".jpg"
  12.  
  13. echo "<div align=\"center\" style=\"font-weight: bold;\"><a href=\"$str_prev\">Poprzednie</a>   <a href=\"$str_next\">Nastepne</a></div><br/> ";
  14. echo "<div align=\"center\"><img src=\"http://dariuszsajdak.pl/gallery/images/$id\" alt=\"Zdjęcie\" width=\"75%\" height=\"75%\" style=\"margin: 5px;\" /></div>";
  15.  
  16. ?>


Teraz tak patrze i :

Parse error: syntax error, unexpected T_ECHO in /home/accounts_d/darex/public_html/gallery/foto.php on line 17
vonski
W 11-tej linii brakuje średnika, po:

  1. <?php
  2. $str_next = implode("-", $arr_n) . ".jpg"
  3. ?>


EDIT:

Tylko jeszcze jest taka kwestia, że jeśli zdjęcia od 1 do 9 są nazwne np. tak: "image-05.jpg" to musisz sobie przed tym implode() napisać jakiegoś if'a co będzie sprawdzał czy jest to jedno z tych zdjęć. Jeśli tak, to musisz dodać przed cyferką "0" bo inaczej będziesz miał na wyniku "image-5.jpg" zamiast "image-05.jpg".
darex
Wiesz, nie potrzebne to bo działa np image-3. Ale mam jescze jedno pytanie, da sie to tego takie cos zrobić żeby max liczyło do np: 25 bo tyle mam zdjęć narazie a robi więcej
vonski
Możesz spróbować najpierw zliczyć ile jest zdjęć w danym katalogu, np.:

  1. <?php
  2. $num = count(glob("gallery/{*.jpg, *.jpeg}", GLOB_BRACE));
  3. ?>


i później w zależności od tego które zdjęcie jest aktualnie wyświetlane napisać instrukcje określające czy link do poprzedniego / następnego ma się pojawić czy nie.. coś w tym stylu:

  1. <?php
  2. // jeśli wyświetlane zdjęcie, nie jest zdjęciem pierwszym
  3. if($arr_p[1] != 0)
  4.    echo "<a href=\"foto.php?id=" . $str_prev . "\">Poprzednie </a>";
  5.  
  6. // jeśli wyświetlane zdjęcie, nie jest zdjęciem ostatnim
  7. if($arr_n[1] <= $num)
  8.    echo "<a href=\"foto.php?id=" . $str_next . "\"> Nastepne</a>";
  9. ?>


Z tym że ta pierwsza instrukcja będzie działać dobrze pod warunkiem, że pierwsze zdjęcie w katalogu nazywa się image-1.jpg.
darex
Nie wiem jak Ci dziękować wszystko działa
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.