Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Przycisk "Poprzedni" przy rekordach RAND()
Forum PHP.pl > Forum > Przedszkole
Natalka
Witam wszystkich!

Mam duży problem odnośnie powracania do ostatnio oglądanych materiałów w portalu.
Otóż sprawa wygląda tak, w portalu wyświetlają się obrazki i jest opcja następny która generuj obrazek LOSOWO wybrany.

Dla przykładu

Oglądamy obrazek ID 1331
Następny to ID 4411
Następny to ID 6628
Następny to ID 454

I teraz chcę zrobić sobie historię w sesjach by po kliknięciu Poprzedni wracało do tego który ostatnio był oglądany, w wypadku gdyby komuś spodobał się jakiś obrazek a przeleciał za szybko do następnego.

W tym wypadku chcę zastosować coś takiego:

Sesja HISTORIA = '454, 6628, 4411, 1331';

Gdzie po kliknięciu na poprzedni mogę sobie wrócić spowrotem, próbuję kilkoma sposobami jednak nic mi to nie daje.

Sprówałam więc sposobem innym troche PROSTSZYM, aby sprawdzić czy to zadziała:

Kod
if(!empty($_SESSION['wsrodku'])){
            $srodek=$_SESSION['wsrodku'];
            $_SESSION['poprzedniObrazek'] = $srodek;
            
            $teraz=$_SESSION['terazObr'];
            $_SESSION['wsrodku'] = $teraz;
            
            $_SESSION['terazObr'] = $id;
            
                        echo $_SESSION['poprzedniObrazek'];
            
            
        }
        else {
            $poprzedni = '';
            if(!empty($_SESSION['terazObr'])) {
                $teraz=$_SESSION['terazObr'];
                $_SESSION['wsrodku'] = $teraz;
                
                $_SESSION['terazObr'] = $id;
            }    
            else {
                $_SESSION['terazObr'] = $id;
            }
        }


Wiem wiem wygląda strasznie, ale na kartce rozpisując sobie to dokładnie przed rozpoczęciem pisania, powinno to działać, napisałam i niestety
nie działa.

Przyjmijmy liczby dla konkretnych sesji

PoprzedniObrazek = 1 (to ten do którego mamy wrócić po kliknięciu na poprzedni)
wsrodku = 2 (wartość następnego powrotu)
teraz = 3 (obrazek który teraz ogladamy)

I przykładzie powyżej powinno to być dziedzioczne 1 przejmuje 2, 2 przejmuje 3, a 3 otrzymuje wartość aktualnie oglądanego obrazka.

Niestety u mnie wartość 1 i 2 jest ciągle taka sama.


Czy macie jakieś pomysły? rady jak coś takiego zrobić, nigdy w życiu nie miałam z czymś takim doczynienia i jest to mój pierwszy raz, nawet nie wiem jak to logicznie zrobić by powracać do ostatnio oglądanych obrazków.

Pomożecie mili Państwo?
Dziękuje
Natalia smile.gif
Ulysess
jeżeli chcesz mieć całą "historie" jakie user obrazki oglądał proponował bym zrobić:

$suma = count($_SESSION['historia'])-1;
$_SESSION['historia'][$suma] = $id_aktualnego_obrazka;

a jak masz już menu Wcześniejszy to w hrefie dajesz link i na końcu ID $_SESSION['historia'][$suma-1]
Natalka
Wielkie dzięki za pomoc, zaraz coś pokombinujęsmile.gif


testuję i działa w taki sam sposób jak u mnie, czyli mogę powrócić tylko do ostatniego obrazka, a nie do 3 w tył.
nekomata
Możesz sobie "nawalić sesji" np. $_SESSION['poprzedni'][$id_obrazka] i jako wartość wstawić poprzedni... sprawdzać issetem itd.
Natalka
Sprawdzam i niestety to nie działa.


Owszem zapisuje mi się to ładnie

Kod
Array ( [-1] => 113 [0] => 359 [1] => 514 [2] => 1295 [3] => 644 [4] => 528 [5] => 644 [6] => 296 [7] => 152 [8] => 1235 [9] => 866 [10] => 1483 )



Tylko że problem jest taki że jak wracam w tył, to przenosi mnie do 866 jak kolejny raz klikam w tył to już wracam do 1483 i to wszystko.
Zmodyfikowałam to jeszcze w taki sposób aby po odświeżeniu nie dodawało mi jeszcze raz tego samego ID, oraz w momencie gdy przechodzę do POPRZEDNI to żeby nie dodawało mi rekordu na początku o tym ID.



Cytat(nekomata @ 3.05.2011, 15:36:16 ) *
Możesz sobie "nawalić sesji" np. $_SESSION['poprzedni'][$id_obrazka] i jako wartość wstawić poprzedni... sprawdzać issetem itd.



Cóż da mi to że zapisszę sobie :

$_SESSION['poprzedni'][1345]
$_SESSION['poprzedni'][51]
$_SESSION['poprzedni'][616]
$_SESSION['poprzedni'][1566]

Powiedz mi w jaki sposób wrócić do 1345 a następnie do 51 i 616?
Oraz po kliknięciu na następny aby on znajdował się na liście w taki sposób aby był pierwszy do którego powrócę.

Niestety nie potrafię tego logicznie zrozumieć nawet, owszem na kartce rozpisałam przetestowałam na kilka różnych sposobów i działa.
Ale w "życiu" niestety nie działa.
mortus
Może inaczej.
  1. // ...
  2. $przod_tyl = $_GET['jakas_zmienna'];
  3. if(isset($_SESSION['numer_obrazka'])) {
  4. $numer_obrazka = $_SESSION['numer_obrazka'] + $przod_tyl;
  5. $_SESSION['numer_obrazka'] = $numer_obrazka;
  6. } else {
  7. $_SESSION['numer_obrazka'] = 0;
  8. }
  9. if(!isset($_SESSION['historia'][$_SESSION['numer_obrazka']]) {
  10. // losujemy obrazek i zapisujemy id w sesji
  11. $_SESSION['historia'][$_SESSION['numer_obrazka']] = $id_obrazka;
  12. } else {
  13. // pobieramy id obrazka z sesji
  14. $id_obrazka = $_SESSION['historia'][$_SESSION['numer_obrazka']];
  15. }
  16. // wyświetlamy obrazek
  17. // ...


Wtedy id poprzedniego obrazka znajduje się w $_SESSION['historia'][($_SESSION['numer_obrazka']-1)].

Ech, nie zwróciłem uwagi, ale o podobnym rozwiązaniu pisał Ulysess.
nekomata
Cytat(Natalka @ 3.05.2011, 14:57:17 ) *
Cóż da mi to że zapisszę sobie :

$_SESSION['poprzedni'][1345]
$_SESSION['poprzedni'][51]
$_SESSION['poprzedni'][616]
$_SESSION['poprzedni'][1566]

Powiedz mi w jaki sposób wrócić do 1345 a następnie do 51 i 616?
Oraz po kliknięciu na następny aby on znajdował się na liście w taki sposób aby był pierwszy do którego powrócę.

Niestety nie potrafię tego logicznie zrozumieć nawet, owszem na kartce rozpisałam przetestowałam na kilka różnych sposobów i działa.
Ale w "życiu" niestety nie działa.

Wybacz , co innego myślałem co innego napisałem.
  1. <?php
  2. //Dane testowe ... START
  3. $_SESSION['poprzednie'] = array(1,17,71,544,324,7544,123,65); // To sie nazbiera samo.
  4. $aktualny = 324;// ID Aktualnego obrazka .
  5. echo '<pre>';
  6. print_r($_SESSION['poprzednie']);
  7. echo '</pre>';
  8. // Dane testowe FINISH
  9.  
  10. if(!in_array($aktualny,$_SESSION['poprzednie'])){
  11. $_SESSION['poprzednie'][] = $aktualny;
  12. }
  13. if(in_array($aktualny,$_SESSION['poprzednie'])){
  14. foreach($_SESSION['poprzednie'] as $klucz => $wartosc){
  15. if($wartosc == $aktualny){
  16. $numer_poprzedniego_w_arrayu_sesji_to = $klucz;
  17. echo 'Wcześniej przeglądałeś ID : '.$_SESSION['poprzednie'][$numer_poprzedniego_w_arrayu_sesji_to-1];
  18. echo '<br/>';
  19. }
  20. }
  21. }
  22. echo 'Aktualnie przeglądasz ID : '.$aktualny;
  23. echo '<br/>';
  24. if(isset($_SESSION['poprzednie'][$numer_poprzedniego_w_arrayu_sesji_to+1])){
  25. echo 'A potem przeglądałeś obrazek o ID : ';
  26. echo $_SESSION['poprzednie'][$numer_poprzedniego_w_arrayu_sesji_to+1];
  27. }
  28. ?>
Dodałem dane testowe dla przejrzystości .
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.