Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MySQL] Przycisk "Poprzedni" przy rekordach RAND(), Jak to zrobić?
Natalka
post
Post #1





Grupa: Zarejestrowani
Postów: 59
Pomógł: 6
Dołączył: 28.10.2009
Skąd: że znowu...

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


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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
Ulysess
post
Post #2





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

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


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]
Go to the top of the page
+Quote Post
Natalka
post
Post #3





Grupa: Zarejestrowani
Postów: 59
Pomógł: 6
Dołączył: 28.10.2009
Skąd: że znowu...

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


Wielkie dzięki za pomoc, zaraz coś pokombinuję(IMG:style_emoticons/default/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ł.

Ten post edytował Natalka 3.05.2011, 14:31:00
Go to the top of the page
+Quote Post
nekomata
post
Post #4





Grupa: Zarejestrowani
Postów: 314
Pomógł: 44
Dołączył: 12.11.2010
Skąd: UK

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


Możesz sobie "nawalić sesji" np. $_SESSION['poprzedni'][$id_obrazka] i jako wartość wstawić poprzedni... sprawdzać issetem itd.
Go to the top of the page
+Quote Post
Natalka
post
Post #5





Grupa: Zarejestrowani
Postów: 59
Pomógł: 6
Dołączył: 28.10.2009
Skąd: że znowu...

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


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.
Go to the top of the page
+Quote Post
mortus
post
Post #6





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


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.

Ten post edytował mortus 3.05.2011, 15:52:42
Go to the top of the page
+Quote Post
nekomata
post
Post #7





Grupa: Zarejestrowani
Postów: 314
Pomógł: 44
Dołączył: 12.11.2010
Skąd: UK

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


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 .

Ten post edytował nekomata 3.05.2011, 18:52:00
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: 10.10.2025 - 02:11