Onmogelijk om form data op te slaan met gebruik van SESSION

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Anoniem: 321378

Topicstarter
Hallo,

Ik heb een formulier gemaakt waarbij de gebruiker een aantal stappen moet doorlopen voordat de gegevens van het formulier verzonden worden naar de database (mysql).

Het gebruik van de verschillende stappen in het formulier is essentieel in deze applicatie en ik maak het gebruik van stappen mogelijk door gebruik te maken van SESSION.

Als alle stappen in het formulier juist worden doorlopen dan wordt de data succesvol naar de database verzonden. Het kan voor komen dat de gebruiker na een bepaalde stap in het formulier toch iets wil wijzigen in de voorgaande stap. Hier heb ik een button voor aangemaakt met een javascript link:

code:
1
<a href="javascript:history.go(-1);"><img/></a>


Als ik nu op de button druk en terug ga naar de voorgaande stap in het formulier, zijn alle gegevens die al ingevuld waren verdwenen en moet de gebruiker helemaal opnieuw beginnen met het invullen van het formulier. Als ik de sessies uit zet dan lukt dit zonder problemen maar met sessies aan gaat het mis.

Is er een manier om ervoor te zorgen dat ik terug kan gaan naar een voorgaande stap in formulier zonder de al ingevoerde data kwijt te raken met het gebruik van SESSION?

Mocht er behoefte zijn aan een inzage op de code, let me know!

PS ik heb zelf ook een aantal mogelijkheden uitgeprobeerd waarvan alle niet gelukt/van toepassing zijn binnen mijn code:
bijv:
code:
1
2
<input type="text" name="someInput" value="<?php print $_SESSION['someInput']; ?>"/>
session_cache_limiter(private_no_expire)


Ik hoop dat jullie me kunnen helpen!

Gr

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 10:36

MueR

Admin Tweakers Discord

is niet lief

Start je de sessie wel op elke pagina? Wat staat er in $_SESSION op elke pagina? Hoe staat je session lifetime?

Daarbij slaan browsers tegenwoordig page states op, waardoor het best wel eens kan zijn dat hij de pagina gewoon uit z'n geheugen laadt, inclusief alle form values. Waarom heb je specifiek voor die (vrij foutgevoelige) javascript methode gekozen? Waarom geef je mensen niet gewoon een knop waarmee ze echt naar het vorige formulier worden gestuurd?

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

Anoniem: 321378

Topicstarter
Volgens mij worden de page states door het gebruik van $_SESSION niet meer opgeslagen. Als ik namelijk session_start() uit mijn script verwijder dan werkt de javascript methode prima. Form values worden dan gewoon weergegeven als er op de knop wordt gedrukt. Ik weet niet of dat logisch is? Ik kon eigenlijk geen andere methode vinden voor een back button. Het formulier wordt op één pagina doorlopen door middel van :

code:
1
2
3
4
if(isset($_GET['do'])){
                    if($_GET['do'] == "firstpageform") {   }
                    if($_GET['do'] == "secondpageform") {   }
                    etc


Sessies staan ook eigenlijk constant open, ik heb nergens een destroy of end. Ik wil best de code in het forum zetten maar ik weet niet of jullie er wijs van worden want het is nogal onoverzichtelijk.

Gr.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Anoniem: 321378 schreef op vrijdag 09 september 2011 @ 13:06:
Ik wil best de code in het forum zetten maar ik weet niet of jullie er wijs van worden want het is nogal onoverzichtelijk.
Dan maak je het overzichtelijk door je (o.a.) te beperken tot relevante(!) stukken code, fatsoenlijke indenting, leesbare variabelen en een duidelijk verhaal eromheen ;) Dat is een testcase. Gewoon je code copy/pasten en dumpen hier heeft geen nut inderdaad.

Als je een degelijke testcase hebt kun je die voor jezelf namelijk ook gebruiken om te verifiëren of je conclusie(s) kloppen en om in te "rommelen" om te zien wat een (mogelijke) oplossing kan zijn.

Verder ben ik vooral eens benieuwd naar de (exacte) HTTP headers.

[ Voor 22% gewijzigd door RobIII op 09-09-2011 13:14 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • djexplo
  • Registratie: Oktober 2000
  • Laatst online: 07-07 15:40
Zo te horen laat je PHP niet de form velden invullen, maar hoop je dat de browser dat doet.
In dat geval misschien iets van:
PHP:
1
2
3
<?php
header("Cache-Control: max-age=3600, must-revalidate"); 
?>

'if it looks like a duck, walks like a duck and quacks like a duck it's probably a duck'


Acties:
  • 0 Henk 'm!

Anoniem: 321378

Topicstarter
Ik was aan het werken aan een uitgebreide beschrijving maar djexplo heeft DE oplossing gegeven. Nu werkt het! Met gebruik van $_SESSION en de gebruiker kan door middel van de javascript knop terug met het behoud van de ingevulde data. Hartelijk dank. Zou bijna denken wat is het addertje onder het gras?

Gr

Acties:
  • 0 Henk 'm!

Anoniem: 321378

Topicstarter
*nee, dit is niet de bedoeling*

[ Voor 197% gewijzigd door MueR op 09-09-2011 13:46 ]


Acties:
  • 0 Henk 'm!

  • trinite_t
  • Registratie: Maart 2003
  • Laatst online: 10-07 13:16
En als een browser de gegevens niet zelf terug zet krijgt de gebruiker een leeg formulier te zien. Niet "the way to go", volgens mij, om je afhankelijk te maken van browsers.

Eigenlijk moet je de gegevens bij een terug actie zelf in je html invullen.

The easiest way to solve a problem is just to solve it.

Pagina: 1