Hej.
Jag har ett formulär med metoden POST och massa textfält. Efter att man postat så kontrolleras alla värden på serversidan och om det är något fel så visas ett felmeddelande.
Men om man trycker på bakåt-knappen i webbläsaren för att korrigera felet så är alla fälten i formuläret tomma.
Det är ju jobbigt om man ska behöva fylla i allting igen.
Går detta att lösa på något sätt?
Jag har lite andra hemsidor kodade i ASP och där fungerar det att trycka bakåt utan att allt blir tomt. Vad beror detta på?
Jag har också funderat på det där, hur andra sidor har löst det hela. Jag har i tidigare projekt löst det med att använda sessions. Sätt sessionsvariablarna när du postar sidan. Om man klickar back så hämtar du bara upp värderna från sessionvariablerna.
Nu har jag gjort lite undersökningar och ja, faktiskt så har det att göra med caching!
Problemet verkar ligga i att jag kör funktionen session_start(); på php-sidan där fomuläret ligger.
När man anropar session_start(); så skickas det tydligen också med massa HTTP-headers som gör att webbläsaren inte cachar sidan:
Ja, om du tar bort session_start så kommer inte dina sessions att funka. Men om du använder dig av sessions att lagra formulärdatan så slipper du oroa dig för det, dessutom så _tror_ jag att det kan vara lite browser-relaterat...
session_cache_limiter() returns the name of the current cache limiter. If cache_limiter is specified, the name of the current cache limiter is changed to the new value.
The cache limiter defines which cache control HTTP headers are sent to the client. These headers determine the rules by which the page content may be cached by the client and intermediate proxies. Setting the cache limiter to nocache disallows any client/proxy caching. A value of public permits caching by proxies and the client, whereas private disallows caching by proxies and permits the client to cache the contents.
In private mode, the Expire header sent to the client may cause confusion for some browsers, including Mozilla. You can avoid this problem by using private_no_expire mode. The expire header is never sent to the client in this mode.
Fast det hjälper ju inte om det är så att någon klickar på back-knappen, då finns ju inte POST variablerna längre.
// Nippe
Nej, men i stället för att ta hand om felet och skriva ut det på test.php (tex), så kan man ta hand om feltestet direkt i form.php och om det blev fel så skrivs felmeddelande plus form ut, annars vidareskickas man till ok.php .
Ett alternativt sätt att lösa det på, kanske, som i alla fall löser problemet med tomma fält.