webForumDet fria alternativet

Smart sätt att behålla POST-värden

PHP

10 svar · 442 visningar · startad av learn

Medlem sedan jan. 20051 130 inlägg
Frågan#1

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>

Alla tips är varmt välkomna!

Glad påsk förresten! :)

Medlem sedan dec. 20003 563 inlägg
#2

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.

Medlem sedan jan. 20051 130 inlägg
#3

cyprys skrev:

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?

Medlem sedan dec. 20003 563 inlägg
#4

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.

Medlem sedan jan. 20051 130 inlägg
#5

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

Medlem sedan dec. 20003 563 inlägg
#6

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.

Medlem sedan jan. 20051 130 inlägg
#7

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

Medlem sedan dec. 20003 563 inlägg
#8

Tills den självdör, yupp.

Medlem sedan jan. 20051 130 inlägg
#9

Mm.

Appråpå självdör. Hur lång tid tar det tills en session blir avrättad? Kan man påverka detta på ngt sätt?

Medlem sedan dec. 20003 563 inlägg
#10

M.h.a. ini_set.

// makes cookie good for a year
ini_set('session.cookie_lifetime',(3600*24*365))

http://www.webmasterworld.com/forum88/6683.htm

Medlem sedan jan. 20051 130 inlägg
#11

Ok, man tackar för hjälpen. Glad påsk på dig :)

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