Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Przycisk wstecz
Forum PHP.pl > Forum > Przedszkole
-void-
Witam. Chciałbym się dowiedzieć, jak mogę sie zabezpieczyc przed naciskaniem przycisku Wstecz w przeglądarce.
Mam plik index.html, w nim formularz HTML i przesyłam go POSTem do pliku wynik.php. Kiedy ktoś wprowadzi dane do formularza, kliknie na Wyślij, a potem naciśnie Wstecz, to znowu ujrzy formularz (z wprowadzonymi danymi, jeśli je zmodyfikuje, to będzie mógł znow kliknąć na Wyślij i zobaczy inną stronę wynik.php (znaczy strona ta sama, ale dane inne). A ja chcę, żeby po kliknięciu na Wstecz dalej pozostawał na stronie wynik.php, niezależnie od ilości kliknięc na ten przycisk (czyli tak jakbym w historii nieskończenie wiele razy dodawał wpis o odwiedzeniu strony wynik.php), ewentualnie może przechodzić do jeszcze poprzedniej strony, to znaczy tej, z której przyszedł jeszcze przed index.html (chcę po prostu, żeby już nie mógł zobaczyć strony index.html). Jeśli ktoś poda rozwiązanie, które wygasa po zamknięciu przeglądarki (a po ponownym otwarciu znów będzie można oglądać index.html), to też nie bedzie źle. Nie wiem, czy mam sie bawic sesjami, czy czym...
wipo
Sesja albo ciastka.

np po wciśnięciu guzika wyślij do zmeinnej $_SESSION['twoja nazwa']=1
a przy wyświetlaniu dajesz warunek
  1. <?php
  2. if ($_SESSION['twoja nazwa']==1)
  3. print 'pokaz wyniki';
  4. else
  5. print 'pokaz formularz';
  6. ?>
-void-
Heh, no właśnie też wpadłem na sesje i dziwnie sie dzieje...
Czasem działa, a czasem nie...
Coś źle robię?
Nie zmieniam kodu, i przy jednym uruchomieniu Wstecz działa normalnie, a przy drugim tak jak ja bym chciał...
Sesje ogólnie dziwnie się zachowują w różnych przeglądarkach i przy różnych ustawieniach, a nawet... przy tych samych ustawieniach i tym samym kodzie, w tej samej przeglądarce... :/
Nie rozumiem, ale może lepiej zrobić to cookiesami?
Tylko nie wiem, jak miałoby to wyglądać...
A jeżeli z sesjami to ja coś robię nie tak, to napiszcie... Ale ja nie wiem... Kod mam chyba ok, bo czasem działa... Chyba nawet nie ma potrzeby, zebym go tu wciskał...to parę linijek tylko.
sticker
shoł mi kod bedzie łatwiej pomóc :]
-void-
if (!$_SESSION['licznik'])
// strona jest odwiedzana po raz pierwszy
{
$_SESSION['licznik'] = 0; // początkowe ustawienie licznika
}
if ($_POST)
{
// właściwa treść wyniku jaki ma być wyświetlony po wpisaniu danych
// ta treść nie ma nic wspólnego z sesjami
}
else
{
// coś, co ma być wyświetlane w przypadku naciśnięcia Wstecz już po wypełnieniu formularza
// czyli zamiast formularza z wpisanymi wynikami mogę napisać np.
// echo 'Już wypełniłes formularz, nie możesz tego zrobić drugi raz!';
}
if ($_SESSION['licznik'] == 0)
{
// formularz
$_SESSION['licznik'] = 1;
}
[/php]
Chyba trochę zamotałem ten kod tongue.gif
wipo
  1. <?php
  2. if ($_POST['wyslij_wynik']){
  3. // zapisz wyniki i je pokaz
  4. //dodatkowo ustaw sesje na true
  5. $_SESSION['licznik']=true;
  6. } else if ($_SESSION['licznik']){
  7. //tutaj jest guzik wstecz
  8. //czyli pokaz jakis wynik przy nacisnieciu tego guzika
  9. } else {
  10. // formularz
  11. }
  12. ?>
-void-
Niestety, dziala dokładnie tak jak mój kod, i to we wszystkich przeglądarkach. Po naciśnięciu wstecz działa standardowo - wyświetla formularz z wpisanymi danymi, i to we wszystkich przeglądarkach. Kod:
  1. if ($_POST)
  2. {
  3. foreach ($_POST as $zmienna)
  4. {
  5. echo $zmienna;
  6. }
  7. $_SESSION['licznik'] = true;
  8. }
  9. else if ($_SESSION['licznik'])
  10. {
  11. echo 'Naciśnięto wstecz.';
  12. }
  13. else
  14. {
  15. ?>
  16. <form action="index.php" method="post">
  17. <input type="text" name="nazwa">
  18. <input type="submit" value="Wyślij">
  19. </form>
  20. <?php
  21. }

A może jednak cookies?
-void-
Z $_COOKIE też próbowałem, i działają dokładnie tak samo jak sesje w tym przypadku.
Nie ma na to sposobu? sadsmiley02.gif wstydnis.gif
wipo
ustaw w metatagach zeby nie czytal strony z cache przeglądarki to moze pomoze
-void-
cytat z kurshtml.boo.pl:

Niestety przegladarki często po prostu ignorują powyższe polecenia, a więc całkowitej pewności nie będzie raczej nigdy :-(

Niestety, to prawda - wszystkie zgodnie olewają <meta>
(chyba, że nie takie mety wstawiłem)
  1. <meta http-equiv="Cache-Control" content="no-store, no-cache, must-revalidate" />
  2. <meta http-equiv="Cache-Control" content="post-check=0, pre-check=0" />
  3. <meta http-equiv="Pragma" content="no-cache" />
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.