Jag har ett formulär där man fyller i ganska mycket information. När besökaren skickar formuläret så sker en validering av samtliga fält och är något fel så skickas man tillbaka till formuläret. Fungerar prima, förutom att all ifylld information försvinner! Lite jobbigt med tanke på att det rör sig om en hel del info...
Kan tänka mig att detta är ett vanligt problem. Vilka metoder rekomenderas för att komma runt problemet?
Ett litet exempel på hur jag byggt upp det hela:
<?
if (isset($_POST["text1"])) {
// Validering
if (strlen($_POST["text1"])<10) {
header ("Location: index.php?fel");
} else {
header ("Location: index.php?skickat");
}
}
if (isset($_GET["fel"])) {
echo "Formuläret innehöll felaktigheter!";
} elseif (isset($_GET["skickat"])) {
echo "Nu är det skickat!";
}
?>
<form method="post">
<input type="text" name="text1" />
<input type="submit" />
</form>
Det vanliga sättet är väl att spara all information som skrivs in i sessions och hela tiden sätta sessionvärdena som default i formuläret vid varje återladdning av sidan.
Det vanliga sättet är väl att spara all information som skrivs in i sessions och hela tiden sätta sessionvärdena som default i formuläret vid varje återladdning av sidan.
Ok, det visste jag inte. Finns det inga "rekomenderade gränser" för hur många sessioner man ska sätta på en sin sida?
Rekommenderade gränser ligger väl kring sunt förnuft, men inte borde något formulär vars innehåll är begränsat av hur mycket en människa skriver ligga i gränslandet. M.a.o. borde inte något användarformulär vara någon fara sålänge det inte handlar om att lägga in artiklar/romaner. ;)
Men att radera sessionen direkt när formuläret är korrekt validerat minskar ju tiden minnet används i alla fall.
Ok, så du skulle radera sessionerna när formuläret är rätt ifyllt och skickat och inte efter att de skrivits ut i input-fälten (alltså i slutet av sidan)?
Ok, nu vet jag inte vilket som är mest effektivt iofs. Att skapa/radera sessionvärden gentemot att bara ändra samma session flera gånger. Utan jag kör helt enkelt på det som känns enklast och det är att skriva in värden till session vid varje post och radera när hela formuläret är validerat och klart.
Men visst kan du radera alla session varje gång du skrivit ut dem till formuläret och skapa nya vid varje postning.
Prestandamässigt har jag inte satt mig in det då jag bara använt tekniken på mindre formulär och därför helt enkelt inte brytt mig då jag sett det som försumbart. ;)
Någon annan kanske satt sig in i hur allokering och avallokering av sessionvariabler sköter sig specifikt i php. Samt om det är värt den extra tid i jämförelse att spara i samma session under hela tiden som formuläret är aktuell.
Risken finns ju att besökaren struntar i att skicka formuläret efter att fått en "validerings-varning", och med din metod ligger ju isf sessionen kvar och skräpar...