webForumDet fria alternativet

Session med formulär, data ej kvar om går tillbaka till form

PHP

2 svar · 532 visningar · startad av Schmoo2

Medlem sedan nov. 200721 inlägg
Frågan#1

Hej,
Jag har en formulärsida med session_start(), direkt härefter sätter jag en sessionsvariabel. När man klickar på Skicka kommer man till en ny sida. Här görs en validering av fälten (visar vilka som ev. är fel ifyllda) samt en koll om en viss sessionsvariabel är satt. Är den inte satt så ska ej meddelandet skickas iväg.

Men om man skrivit t.ex. mailadressen på fel sätt och ska gå tillbaka till formuläret så är alla fält tomma. Tidigare ifylld info är kvar om jag tar bort koden om sessionen.

Hur kan jag har kvar sessionsvalideringen och att tidigare ifylld info i formuläret finns kvar om jag går tillbaka?

Medlem sedan mars 20041 505 inlägg
Medlem sedan nov. 200721 inlägg
#3

Jag får det ändå inte att funka. Först en fråga: Vad gör session_cache_limiter(0)? De argument man kan ge session_cache_limiter(), vad jag sett, är none/nocache/private/private_no_expire/public.

Det funkar så tillvida att när jag går tillbaka till formuläret så är den givna texten kvar, MEN nu funkar inte checken som testar om jag redan har postat formuläret. Det har jag $_SESSION["form_session"] till. Om man går tillbaka till formuläret för att ändra ngt och skickar igen så får jag true för (!isset ($_SESSION["form_session"])), se kod nedan.

Hur ska man göra?

Kod överst i formular.php:

	//starta sessionen
	if (!isset($_POST['Submit'])) {
		session_cache_limiter(0);
		session_start();
		$_SESSION["form_session"] = "yes";
	}
	else {
		session_start();
	}

Del av kod i BODY i formular.php:

if (isset($_POST['Submit']) && $_POST['Submit'] == 'Skicka')
  include("inc/formmail.php");
else {
?>
<p><font color="#0000FF">*</font> obligatoriska uppgifter<br><?php // echo "x".SID."x"; ?>&nbsp; </p>
<form name="kontakt" method="post" action="<?php echo $_SERVER['PHP_SELF']."?".SID; ?>">
...
<p>
<input name="Submit" type="submit" value="Skicka">
<input name="Reset" type="reset" value="Rensa formul&auml;ret">
</p>
</form>

I formmail.php:

//kontrollerar om en session är aktiv
if (!isset ($_SESSION["form_session"]))
  $errors[] = "- din användning av vårt Formmail är inte tillåten!";
258 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)