[PHP]Session uitstellen/later starten

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb weinig ervaring met sessions in php, de meeste vragen/berichten over sessions gaan over iets anders namelijk.

Het probleem...

Ik heb een formulier gemaakt met een sessie, dat werkt allemaal correct, echter het probleem zit in de BACK knop van de browser.
Als deze gebruikt wordt dan zijn alle waardes weer leeg, dit is echter niet de bedoeling. Ik wil de sessie gebruiken dat de ingevulde waardes maar 1 keer in de database geschreven kunnen worden.

Ik heb het script opgebouwd uit 2 php files.
In de eerste php file staat het formulier, dat formulier moet in 4 stappen worden ingevuld. In het 2de php bestand worden de gegevens in de DB gezet.

Nu is het eerste php bestand (index.php)als volgt opgebouwd:
een standaard <form> actie met submit.
Deze submit verwijst naar het zelfde bestand index.php
In dit bestand staat dan simpel weer gegeven het volgende:
code:
1
2
3
4
5
sessie start
if ($submit1=="ok") { <form actie> bla bla script invoer velden<submit actie>}
if ($submit2=="ok") { <form actie> bla bla script invoer velden<submit actie>}
if ($submit3=="ok") { <form actie> bla bla script invoer velden<submit actie>}
<form> invoer velden bla bla <submit1=ok>

Zo zijn er 4 van deze sectie's.
De laatste sectie is een overzicht met een vinkje dat je accoord gaat met bepaalde voorwaarden, als je dan op submit klikt ga je naar het 2de php bestand.

Alles werkt zoals ik al zei, echter terug gaan in de sectie's niet, stel je hebt een fout gemaakt in sectie 1 van het formulier en je zit al in sectie 2 worden alle gegevens door de sessie gewist als je op BACK klikt.

Ik wil nu dus dat alleen in sectie 4 de sessie begint, echter alleen het sessie commando verplaatsen in sectie 4 werkt niet, want als je dan op back klikt en je drukt vernieuwen staat alle ingevulde data er ineens weer omdat dit een overzicht veld is, zo kan men dus alsnog 2x dezelfde formulieren insturen.

Ik start mijn sessie in het eerste bestand met het volgende commando:
code:
1
2
session_start();
if (isset($_SESSION['al_ge_submit'])) { exit ("error tekst"); }


Dit staat direct 1 van de eerste commando's bovenaan.

In het 2de bestand staat ook direct vrijwel bovenaan:
code:
1
2
 session_start();
$_SESSION['al_ge_submit']="ja";


Zoals ik al zei, de opzet werkt correct echter ik wil dus dat het alleen werkt vanaf de laatste sectie in het eerste bestand.

Kan me iemand nuttige tips geven hoe ik dit kan maken, met de php website kom ik er niet echt uit, ik ben nog te n00b met sessies en begrijp de meeste dingen nog niet goed.

Alvast bedankt

[ Voor 8% gewijzigd door Verwijderd op 12-06-2003 03:14 ]


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
hoe ik het zou doen:

- niet met 2 maar gewoon 1 pagina werken
- bij het submitten van iedere stap alle waardes in de sessie opslaan die gesubmit worden.
- als je code herkent dat je bij de laatste stap bent en het moet in de database gezet worden het volgende doen:
controleren van velden:
-> goed -> data invoeren
-> fouten -> data niet invoeren, aangeven waar de fouten zitten en kans bieden dit te herstellen.
- Als je de data in de database heb gezet (controleren of dit goed gegaan is uiteraard) dan de sessie leeggooien (destroyen) en de user bedanken
- bovenaan telkens controleren bij welke stap ze zijn en of er wel een sessie aanwezig is. Als ze bij stap 3 zijn (vlak voor het invoeren) en er is geen sessie-data dan weet je dus dat ze de backbutton hebben gebruikt. Als je dit helemaal bovenaan in je code doet dan kun je met een header("location: url.php"); zorgen dat ze weer bij pagina 1 komen. (waarschijnlijk moet je ook nog ff een header zetten die duidelijk maakt dat ie niets uit z'n cache mag trekken)

Ik zou er overigens niet op gokken dat de backbutton het 100% doet (in de zin dat alle ingevulde informatie er weer staat). Dat is soms niet zo en dan moeten ze alles opnieuw invullen. Je kunt het dan dus beter uit je sessie trekken als ze op een pagina komen die ze al eens hebben ingevuld en gewoon met linkjes de mogelijkheid geven heen en weer te skippen

edit:
maargoed, dat is hoe ik het zou doen denk ik....wil niet zeggen dat dat de juiste manier is natuurlijk (als die er al is) :)

[ Voor 7% gewijzigd door marty op 12-06-2003 03:59 ]


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 12:54

Bosmonster

*zucht*

Er is een bug dat als je session_start() gebruikt, de browser niet meer formuliervelden onthoudt... is erg vervelend, maar het volgende lost het op:

PHP:
1
session_cache_limiter ('private_no_expire');


Zet dit VOOR je session_start() en alles zou weer als vanouds moeten werken ;)

Ow.. dit is als je PHP 4.2+ gebruikt.. gebruik je ouder (maar wel 4.0.3+), neem dan:

PHP:
1
session_cache_limiter ('private');


Dit schijnt echter wel problemen te geven met Mozilla, vandaar de no_expire toevoeging in 4.2.

[ Voor 29% gewijzigd door Bosmonster op 12-06-2003 09:13 ]