[PHP]page session probleem

Pagina: 1
Acties:

Onderwerpen


  • 4Real
  • Registratie: Juni 2001
  • Laatst online: 14-09-2024
Iedereen kent het wel, je submit iets je komt bij een pagina met of fout melding of succes (klik hier om verder te gaan blaat) of je wordt meteen naar het topic (of iets) gestuurd

maar dan, je klikt op back en komt of meteen bij een error van deze pagina is al verstuurd, je klikt op F5 en alles gegevens worden nog keer verstuurd..

hoe los ik dit op?

Ik heb nu dit idee

ik typ ff heel ranzig dus niet gaan zeuren van je moet met _POST enz gaan werken dat weet ik wel ;)

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
session_start(); 

if ($_SESSION['submitted'])
{
    // error? of succes message
}
else
{
    if ($submit)
    {
        // php checks en in db plaatsen

        $_SESSION['submitted'] = TRUE;
    }
    else
    {
        // invul scherm (<form> enz)
    }
}


of kan dit heel makkelijk anders? :)

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Probleem is dat dit maar 1x werkt. De volgende keer dat iemand iets submit is submitted nog true en werkt het niet.

Je kunt het beste de gebruiker rechstreeks doorsturen mbv een leuke header die aangeeft dat de pagina is 'verplaatst' Hierdoor wordt de submit verwerkende pagina niet in de history opgenomen (afaik).

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • 4Real
  • Registratie: Juni 2001
  • Laatst online: 14-09-2024
Janoz schreef op 28 August 2003 @ 10:52:
Probleem is dat dit maar 1x werkt. De volgende keer dat iemand iets submit is submitted nog true en werkt het niet.

Je kunt het beste de gebruiker rechstreeks doorsturen mbv een leuke header die aangeeft dat de pagina is 'verplaatst' Hierdoor wordt de submit verwerkende pagina niet in de history opgenomen (afaik).
dat 1 keer werken deel kun je wel tegen gaan, dan maak je hem gewoon weer leeg in het deel dat hij checked

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

Bosmonster

*zucht*

Wat opmerkingen over je code:

if ($_SESSION['submitted'])

Dit levert een foutmelding op bij errorreporting op E_ALL, aangezien het dus kan dat heel die index niet bestaat. Gebruik isset() om te kijken of de index al bestaat.

if ($submit)
Ehh? $submit? Die komt binnenwaaien? Verder is iets dergelijks (variabele) niet de manier om te checken of een formulier gesubmit is, kijk dan liever naar $_SERVER['REQUEST_METHOD'].
maar dan, je klikt op back en komt of meteen bij een error van deze pagina is al verstuurd, je klikt op F5 en alles gegevens worden nog keer verstuurd..
Das heel simpel op te lossen met een header('Location: bericht.php'). Werkt altijd bij alle formulieren. Je kunt zelfs gewoon redirecten naar de zelfde pagina maar dan met een ?msg=gesubmit toevoeging bijvoorbeeld.

  • 4Real
  • Registratie: Juni 2001
  • Laatst online: 14-09-2024
Bosmonster schreef op 28 August 2003 @ 11:42:
Wat opmerkingen over je code:

if ($_SESSION['submitted'])

Dit levert een foutmelding op bij errorreporting op E_ALL, aangezien het dus kan dat heel die index niet bestaat. Gebruik isset() om te kijken of de index al bestaat.

if ($submit)
Ehh? $submit? Die komt binnenwaaien? Verder is iets dergelijks (variabele) niet de manier om te checken of een formulier gesubmit is, kijk dan liever naar $_SERVER['REQUEST_METHOD'].


[...]

Das heel simpel op te lossen met een header('Location: bericht.php'). Werkt altijd bij alle formulieren. Je kunt zelfs gewoon redirecten naar de zelfde pagina maar dan met een ?msg=gesubmit toevoeging bijvoorbeeld.
1e deel: ik typ ff heel ranzig dus niet gaan zeuren van je moet met _POST enz gaan werken dat weet ik wel
simpel lezen :|

2e deel, krijg je dan niet in je adres balk te zien reply.php?msg=gesubmit?

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

Bosmonster

*zucht*

2e deel, krijg je dan niet in je adres balk te zien reply.php?msg=gesubmit?
Ja so? Wat maken developers zich toch altijd druk om wat er in die adresbalk komt te staan..

Als je echt moeilijk wilt doen kun je de waarde ook via de sessie doorgeven...

[ Voor 18% gewijzigd door Bosmonster op 28-08-2003 12:20 ]


  • 4Real
  • Registratie: Juni 2001
  • Laatst online: 14-09-2024
*zucht* zei dan meteen dat het idee van mij hier boven wel goed was.......

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

Bosmonster

*zucht*

Nee je idee is nog steeds niet handig. Een redirect is de simpelste en meest effectieve manier om een tweede post te voorkomen. Dat van die sessie noemde ik alleen om die ene waarde door te geven en heeft dus NIKS met jouw initiele opmerking te maken.

En als je goed leest snap je dat ik dat zei als 'vieze' truc om het niet in je url terug te laten komen. En 'vieze' dingen zijn nog steeds niet 'goed'. Developers moeten eens stoppen met zeuren over hoe de adresbalk deruit ziet... Erger nog.. mensen die om die reden een frameset om hun site gooien :r
Pagina: 1