webForumDet fria alternativet

Formulärfälten blir tomma

PHP

10 svar · 778 visningar · startad av Troxy

Medlem sedan mars 20041 505 inlägg
Frågan#1

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å?

Mvh Troxy

Medlem sedan apr. 2002830 inlägg
#2

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.

Lycka till!

Medlem sedan mars 20041 505 inlägg
#3

Okej, det är ju en lösning.

Men varför behöver man inte göra det när det gäller ASP?

Medlem sedan mars 20025 907 inlägg
#4

Har du någon kod som gör så att sidan inte cacheas eller något liknande? Jag har inte märkt det problemet.

Medlem sedan mars 20041 505 inlägg
#5

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:

Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache

Frågan är nu: hur ska jag lösa detta?
Om jag tar bort session_start(); så kommer väl alla mina sessioner att sluta fungera?

Medlem sedan apr. 2002830 inlägg
#6

Hm...

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...

// N

Medlem sedan apr. 2002830 inlägg
#7

Kanske kan vara något?

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.

Medlem sedan mars 20034 471 inlägg
#8

Hmm, kan du inte sätta fälten till $_POST-värdena om dessa är satta, när sidan laddas? Om jag förstått din felbeskrivning rätt är det så jag gör.

Alltså i formulärsidan:

session_start();
if (isSet($_POST["myField"])) $f = $_POST["myField"];
else $f = ""; //tex

//...
echo "<input type=\"text\" name=\"myField\" value=\"$f\">....";
Medlem sedan apr. 2002830 inlägg
#9

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

Medlem sedan mars 20034 471 inlägg
#10

nkrantz skrev:

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.

Medlem sedan mars 20041 505 inlägg
#11

nkrantz, tack för tipset!

session_cache_limiter(0);

Denna kod löser problemet. Den ser till att inga cache-headers skickas med till webbläsaren, och då kan man trycka bakåt utan att formuläret rensas.

Tack för hjälpen!

248 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)
116 ms — ändringar (db)