Pagina herladen als ik op terug knop in browser druk
Als ik mijn contactformulier invul en verstuur wordt ik doorgestuurd naar een bedankpagina.
Echter, als ik op de terug knop in mijn browser druk komt het ingevulde formulier weer te voorschijn. Dat wil ik niet.
Dus heb ik onderstaande snippet gevonden en toegevoegd. Dit zorgt ervoor dat de vorige pagina herladen wordt als ik op de terug knop druk. Waardoor formulier dus leeg getoond wordt.
Code (php)
1
if (window.performance.getEntriesByType('navigation')[0].type === "back_forward") {location.reload();}
Ik heb weinig verstand van JS, mijn vraag is of dit correct is en geen deprecated onderdelen bevat?
Ik las dat "navigation" deprecated is, maar ik weet niet of dit over het element uit mijn code gaat:
https://developer.mozilla.org/en-US/docs/Web/API/Performance
Guido
De middelste if heb ik zelf toegevoegd. Als je die gebruikt keer je terug naar de form pagina waar je vandaan kwam.
Als je de 2 regels comment // blijf je op dezelfde pagina.
Het werkt niet met bestanden uploaden. Daarvoor moet je eerst $_FILES verwerken voordat je onderstaande code uitvoert.
https://stackoverflow.com/questions/13889198/php-avoid-browser-reposting-post-on-page-refresh/13889283#13889283
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
session_start();
if( strcasecmp( $_SERVER['REQUEST_METHOD'],"POST" ) === 0 )
{
$_SESSION['postdata'] = $_POST;
header("Location: ".$_SERVER['PHP_SELF']."?".$_SERVER['QUERY_STRING']);
exit();
}
if ( !$_SESSION['postdata'] )
{
header("Location: ./");
exit();
}
if( isset( $_SESSION['postdata'] ) )
{
$_POST = $_SESSION['postdata'];
unset($_SESSION['postdata']);
}
?>
<!DOCTYPE html>
session_start();
if( strcasecmp( $_SERVER['REQUEST_METHOD'],"POST" ) === 0 )
{
$_SESSION['postdata'] = $_POST;
header("Location: ".$_SERVER['PHP_SELF']."?".$_SERVER['QUERY_STRING']);
exit();
}
if ( !$_SESSION['postdata'] )
{
header("Location: ./");
exit();
}
if( isset( $_SESSION['postdata'] ) )
{
$_POST = $_SESSION['postdata'];
unset($_SESSION['postdata']);
}
?>
<!DOCTYPE html>
Gewijzigd op 24/09/2023 20:01:44 door Adoptive Solution
@Adoptive Solution - Bedankt, maar het betreft een plugin van WordPress en het gebruik van PHP sessies wordt sterk ontmoedigd (WordPress heeft een zogenaamnde transients API voor tijdelijke opslag van data).
Ik heb nog geen oordeel gekregen over mijn JS fix?
Guido
- Ariën - op 24/09/2023 19:37:16:
Los het serverside op. Clientside kan je alles omzeilen.
Code (php)
1
if (window.performance.getEntriesByType('navigation')[0].type === "back_forward") {window.location.href=window.location.href;}
Toevoeging op 24/09/2023 23:27:45:
Quote:
Los het serverside op. Clientside kan je alles omzeilen.
Deze methode gebruik ik al voor doorsturen na succesvol verzenden. Dus verversen vd pagina is ondervangen, alleen mijn vraag ging over terug naar vorige pagina.
Guido
Gewijzigd op 24/09/2023 23:28:35 door Guido -
Ik maak dus al gebruik van Post/Redirect/Get en dat werkt prima. Ik zie dat mijn $_post global leeg is na verzenden van formulier.
De reden waarom formulier ingevuld is als ik op de terug knop druk komt doordat de waardes in geheugen van de browser blijven staan.. Is dat op een eenvoudige manier op te lossen? Ik kan autocomplete="off" toevoegen aan mijn formulier maar dat werkt niet optimaal in alle browsers merk ik.
Aanvulling: ik ben er achter dat dit met headers / de back/forward cache te maken heeft.
Guido
Gewijzigd op 26/09/2023 21:56:24 door Guido -