Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Jak zablokować poprzednią podstronę?
Forum PHP.pl > Forum > Przedszkole
in5ane
Witam. Mam problem, otóż zastanawia mnie jedna rzecz. Użytkownik dodaje sobie coś (jakiś tam wpis), po dodanie pokazuje mu się podstrona: add_finish.php, w której to ma napis: Gratulacje za dodanie, bla bla bla, adres do twojego wpisu: http://......./ID.../.... No i sprawa wygląda tak, że co, ja mogę zrobić, że jak użytkownik wciśnie wstecz (lub wciśnie głupi backspace), to żeby mu nie pokazała się już ta strona. Albo pusta strona, albo napis jakiś musi się pokazać. Macie jakieś pomysły?
Michasko
Przed wyświetleniem sprawdzaj, czy żądanie przyszło metodą POST (i posprawdzaj czy są zdefiniowane zmienne formularza, którym dodawał).
Jeśli tak - obsłuż to żądanie, dodaj wpis do bazy i wyświetl komunikat, że się powiodło, a następnie (np. po 3 sekundach) przekieruj go do innej strony (np. dodanego przez niego wpisu).
Jeśli nie - wyświetl błąd smile.gif

http://en.wikipedia.org/wiki/Post/Redirect/Get
in5ane
Zrobiłem coś takiego:
  1. if (strpos($_SERVER['HTTP_REFERER'], 'offers/add') != false))

Ale niestety, jak daję wstecz, to nic to nie zmienia. A wstecz jest już ze strony offers/item.
markonix
Być może może w cache siedzi.

http://stackoverflow.com/questions/404617/...sing-javascript
in5ane
Próbowałem również z tym żądaniem: $_SERVER['REQUEST_METHOD'], ale zawsze jest, że POST.

To samo jest z REQUEST_URI. Więc cały czas przy użyciu wstecz dane są poprzednie.

Cytat(markonix @ 23.01.2013, 22:14:45 ) *

To by było fajne, gdyby nie to, że, jak ktoś da wstecz to ma: Ten dokument nie jest już dostępny.
Dominator
Strona dodawania wpisu: (gdy wszystko pójdzie dobrze)

$_SESSION['y'] = 1;

add_finish.php

$_SESSION['y'] = 0;

--
Potem sobie sprawdzasz na stronie dodawania wpisu czy $_SESSION['y'] jest 1 czy 0.
in5ane
Kur... przy wstecz SESJA nadal ma wartość 1. Jak dam po tym wsteczu refresh, to wtedy jest 0.
Dominator
Jak w add_finish.php nadasz 0 to niemożliwe jest aby w pliku dodawania czegoś było 1 ...
in5ane
  1. if ($page == 'add')
  2. {
  3. sesja o nazwie 'y' wartosc 1;
  4. }
  5. elseif ($page == 'add_finish')
  6. {
  7. if ($_SESSION['y'] == 1)
  8. {
  9. sesja o nazwie 'y' wartosc 0;
  10. echo 'finisz, adres twojego dodania: <a href="http://asd.pl/item/10';" target="_blank">http://asd.pl/item/10';</a>
  11. }
  12. else
  13. {
  14. echo 'nie kombinuj';
  15. }
  16. }
Mam coś takiego mniej więcej.

Chcę zaznaczyć.
Jak kliknę wstecz, to mam echo 'finisz.....';. Ale gdy kliknę refresh (odświeżę stronę), to już mi się pokazuje echo 'nie kombinuj';.
Dominator
Ja bym to wykonał tak:

Strona, na której dodajemy coś:

  1. if(warunek)
  2. {
  3. $_SESSION["y"] = 1; //jesli wszystko poszlo dobrze
  4. }


add_finish.php

  1. if($_SESSION["y"] == "1")
  2. {
  3. echo "Dodałeś coś";
  4. }
  5. else if($_SESSION["y"] != 1)
  6. {
  7. echo "Nie cwaniakuj";
  8. }
  9. $_SESSION["y"] = 0;


Powinno działać smile.gif

//edit:
Już sam nie wiem, pomieszałem tu coś sad.gif
in5ane
Kolega, zerknij co dodałem do ostatniego posta.
Cytat(in5ane @ 23.01.2013, 22:40:58 ) *
Chcę zaznaczyć.
Jak kliknę wstecz, to mam echo 'finisz.....';. Ale gdy kliknę refresh (odświeżę stronę), to już mi się pokazuje echo 'nie kombinuj';.

Z tym jest to samo.

@edit: Niech ktoś coś zaproponuje, przecież to jest chyba problem, z którym wiele osób się spotyka. Nikt nie chce, gdy ktoś kliknie wstecz, żeby mu się pokazywały gratulacje, gdy dodał coś wcześniej, że coś dodał lub może jeszcze mu się podwajał wpis (akurat to mi się nie dzieje).
Michasko
Dominator troche pomieszał warunki i chyba przez to nie działa.
Jeszcze przed wysłaniem formularza ustaw sobie zmienną sesji (lub np. ciasteczko), np.
  1. $_SESSION['wyslano'] = 0;


Na stronie, na której przesyłasz dane do bazy - PRZED wysłaniem sprawdzaj, czy ta zmienna jest ustawiona na 1. Jeśli nie jest - prześlij dane i ustaw zmienną na 1.
Jeśli tak - nie przesyłaj.

Zamiast 0 - 1 możesz ustawić np. tytuł dodawanego wpisu. Wtedy możliwe będzie dodanie innego wpisu, ale nie takiego samego.

Sprawdziłem to u siebie na prostym skrypcie i działa.

formularz.php
  1. <?php
  2. $_SESSION['wyslano'] = 0;
  3. ?>
  4.  
  5. <html><head></head><body>
  6.  
  7. <form action="wyslij.php" method="post"><input type="text" name="dane" /><input type="submit" name="dodaj" value="dodaj" /></form>
  8.  
  9. </body></html>


wyslij.php
  1. <?php
  2.  
  3. if($_SESSION['wyslano'] == 0)
  4. {
  5. echo "dodales wpis";
  6. $_SESSION['wyslano'] = 1;
  7. }
  8. else
  9. {
  10. echo "nie cwaniakuj :)";
  11. }
  12. ?>
in5ane
A no widzisz, jest cały czas tak jak mówię. Słuchajcie, opisuję kroki.
1. Wypełniam formularz
2. Wysyłam formularz
3. Wyświetlam gratulacje, że dodano i link do wpisu
4. Klikam wstecz
5. Pokazuje mi się dokładnie punkt 3
6. Gdy wcisnę refresh (odświeżę stronę), to wtedy pokazuje mi się: "nie cwaniakuj" - dopiero po odświeżeniu tej strony

Wiecie w czym rzecz?
aras785
Ja wiem w czym rzecz i nie wiem gdzie Ty widzisz problem...
in5ane
Cytat(aras785 @ 24.01.2013, 08:54:09 ) *
Ja wiem w czym rzecz i nie wiem gdzie Ty widzisz problem...

Pomogłeeeeeś...
nospor
1) Jeśli po WSTECZ ładuje ci się ta poprzednia strona bez problemu, znaczy że jej treść pobierana jest z cache przeglądarki a nie z serwera. Bo jakby była pobierana z serwera to by wyświetliło się Twoje ostrzeżenie o cwaniakowaniu.
Jeśli więc tak jest, to co ty się chłopie tym przejmujesz? Niech się wyświetla treśc z przeglądarki, koleś nic z tą treścią nie zrobi, nie wyśle ponownie tego forma, bo przecież po jego wysłaniu zareaguje Twoje ostrzeżenie.

2) Mógłbyś się oczywiście bawić w jakieś ciasteczko tworzone przez js, a potem reagowanie na cofnięcie przez js - nie wierzę jednak że piszesz jakiś system bankowy by się takim czymś w ogóle zajmować

in5ane
Cytat(nospor @ 24.01.2013, 09:02:07 ) *
1) Jeśli po WSTECZ ładuje ci się ta poprzednia strona bez problemu, znaczy że jej treść pobierana jest z cache przeglądarki a nie z serwera. Bo jakby była pobierana z serwera to by wyświetliło się Twoje ostrzeżenie o cwaniakowaniu.
Jeśli więc tak jest, to co ty się chłopie tym przejmujesz? Niech się wyświetla treśc z przeglądarki, koleś nic z tą treścią nie zrobi, nie wyśle ponownie tego forma, bo przecież po jego wysłaniu zareaguje Twoje ostrzeżenie.

2) Mógłbyś się oczywiście bawić w jakieś ciasteczko tworzone przez js, a potem reagowanie na cofnięcie przez js - nie wierzę jednak że piszesz jakiś system bankowy by się takim czymś w ogóle zajmować

Już właśnie wczoraj odpuściłem, bo stwierdziłem, że nie doda ponownie wpisu użytkownik, ale ktoś tutaj odpisał i zacząłem temat na nowo smile.gif Dzięki tongue.gif
nospor
Sam napisałeś:
Cytat
Niech ktoś coś zaproponuje, przecież to jest chyba problem, z którym wiele osób się spotyka.
Więc nie pisz, że odpuściłeś i nie zwalaj winy na kogoś kto to ponownie zaczął. SKoro odpuściłeś to trzeba było napisać że odpuszczasz...
in5ane
Cytat(nospor @ 24.01.2013, 09:10:16 ) *
Sam napisałeś:
Więc nie pisz, że odpuściłeś i nie zwalaj winy na kogoś kto to ponownie zaczął. SKoro odpuściłeś to trzeba było napisać że odpuszczasz...

Tzn. później sam sobie odpuściłem. Nie ważne. Tak czy siak odpuszczam tongue.gif Nie złość się! Złość piękności szkodzi tongue.gif
nospor
Ja się nie złoszczę. Odpowiadam jedynie na Twoje dziwne zarzuty, jak to ludzie cię męczą w temacie a Ty biedaku już dawno odpuściłeś...

Poza tym nie widzę najmniejszego powody byś musiał pokazywać mi język kilkukrotnie. To Ty się nie popisałeś a nie ja, język można pokazać conajwyżej Tobie.
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.