[PHP] Posten zonder posten

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een enquete gemaakt waarbij vraag voor vraag beantwoord moet worden. Gebruikers kunnen heen en weer en weer terug in de vragen.

Wanneer ik na elk antwoord de antwoorden POST en dan naar de volgende vraag ga dan is dat op zich wel koel.

Probleem is wanneer men op de terug knop drukt van de browser. Dan krijg je zo'n melding van IE dat er een formulier gepost is.

Kan je dit afvangen op de een of andere manier? Zo nee, kan je dan een array meegeven in het url (dus als GET variabele)? Ik las dat je via GET Maximaal 256 karakters mee kan geven. In mijn geval kunnen het er wel eens meer zijn.

Bedankt voor elke hulp en of tip.

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

waarom zet je de antwoorden niet in een sessie, en na elke POST doe je een Header('Location: url') ?

Acties:
  • 0 Henk 'm!

Verwijderd

je zou dat in een array kunnen stoppen en dat via serialize() en unserialize() van string naar array en weer omgekeerd omzetten...

mooier is misschien gebruik maken van layers en dan voor elk deel van je vragen een andere div laten zien oid...

$_GET zou ik niet gebruiken das idd beperkt aan een aantal karakters...

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Voor het terug gaan moet je niet de back button van de browser gebruiken. Het beste is om gewoon een extra submit knop te maken die terug springt. In de onclick van deze knop kun je een hidden field aanpassen die aangeeft dat er neit naar de volgende, maar naar de vorige vraag moet worden gegaan. Verder kun je er voor zorgen dat het drukken op deze knop eventuele validatie uitschakeld. Het is een beetje lullig om een 'veld is verplicht' melding voor je neus te krijgen terwijl je naar de vorige vraag wilt.

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


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Erkens, dat is nog wel een plan.

serialize etc is geen oplossing ivm het max aantal karakters via GET

Janoz, ik heb bepaalde gebruikers ertussen zitten die echt wel de terug knop van de browser gaan gebruiken. Dessalnietemin bedankt voor je suggestie.

[ Voor 43% gewijzigd door Verwijderd op 05-01-2004 16:54 ]


Acties:
  • 0 Henk 'm!

  • FlowinG
  • Registratie: Maart 2003
  • Laatst online: 19-09 17:00
Elk antwoord staat in een formulier. Dat formulier verstuur je niet dmv van post maar met get. Als die pagina aangeroepen wordt, dan wordt dus het antwoord meegstuurd via de url. Het antwoord kan je dan opslaan (Bv in een sessie). Als de gebruiker terug gaat wordt dan in principe het antwoord opnieuw opgestuurd. Dat is geen probleem als je bv een array gebruikt. Eventueel kan je er ook nog een foutafhandeling gebruiken zodat je maar een keer een antwoord kan opsturen.
Als het formulier dan is gepost, kan je net zoals Erkens zegt doorsturen dmv van Header("Location: ...")

Acties:
  • 0 Henk 'm!

Verwijderd

serialize() moet je ook zien om in één inputveld al je eerder ingevulde waardes in te proppen (niet via $_GET, maar via $_POST). Met behulp van je een initialisatie functie kan je dan waardes controleren en terug plaatsen in het formulier....

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op 05 januari 2004 @ 16:53:
Janoz, ik heb bepaalde gebruikers ertussen zitten die echt wel de terug knop van de browser gaan gebruiken. Dessalnietemin bedankt voor je suggestie.
Kan je de enquete dan niet in een javascript venster doen?
Dan kan je al de onnodige balken weghalen, waaronder de back-button.

Acties:
  • 0 Henk 'm!

Verwijderd

dan heb je nog steeds je "back-space" button :) Wil je niet dat gebruikers die willen gebruiken zal je of dat moeten controleren of gaan werken binnen één document met layers...

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Met divjes werken is wel mooi, en dan met wat JS dynamisch nieuwe vragen ophalen enzovoorts, dat is erg leuk speelgoed hoor.

Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Een truuk die ik oa in de webinterface van XS4All toegepast zie worden is het gebruiken van de history.back() JavaScript methode. Deze voorkomt dat mijn browser vraagt of de gegevens opnieuw gesubmit moeten worden. :)

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Spider, dat klopt. Maar history.back() of history.go(-1) werkt niet echt als je op je terug knop drukt in de browser.

Ik heb iets in mijn hoofd met een soort van tussenpagina, maar dat moet ik nog even uitdenken.

Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Verwijderd schreef op 05 januari 2004 @ 21:15:
Spider, dat klopt. Maar history.back() of history.go(-1) werkt niet echt als je op je terug knop drukt in de browser.

Ik heb iets in mijn hoofd met een soort van tussenpagina, maar dat moet ik nog even uitdenken.
Wat je daarom ook moet doen is een hele grote terug knop maken; dan voorkom je dat mensen de browser knop gebruiken (vooral als je deze zoals voorgesteld onzichtbaar maakt ;) )

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • SWINX
  • Registratie: Juni 2001
  • Laatst online: 23-07 18:19
ook wel eens aangedacht dat een hele grote terugknop wel een beetje heel erg veel ruimte inneemt?

Mannen komen van Mars Tweakers, vrouwen van Venus Bokt


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

SWINX schreef op 05 januari 2004 @ 22:23:
ook wel eens aangedacht dat een hele grote terugknop wel een beetje heel erg veel ruimte inneemt?
buiten dat, zelf gebruik ik gewoon backspace juist omdat ik het met toetsenbord navigeren veel handiger vind, en ik weet dat er velen zijn die het ook zo doen ;)

Acties:
  • 0 Henk 'm!

  • SWINX
  • Registratie: Juni 2001
  • Laatst online: 23-07 18:19
en dat is juist ook zo'n irritante feature, wil je iets corrigeren, ga je meteen een pagina terug :(

Mannen komen van Mars Tweakers, vrouwen van Venus Bokt


Acties:
  • 0 Henk 'm!

Verwijderd

offtopic:
da's geen irritante feature, da's een uitdaging om ook voor toetsenbord gebruik e.d. je applicatie still running te houden... dankzij al die irritante feature heb jij werk :)


Reden genoeg om een juiste afweging te maken hoe je dit project gaat aanpakken, zeker omdat je (graag) met heen-en-weer buttons wil gaan werken...

Acties:
  • 0 Henk 'm!

  • Morax
  • Registratie: Mei 2002
  • Laatst online: 20:32
Is het in dat geval geen idee om de vragenpagina te lanceren in een pop-up schermpje waarin je de hele werkbalk met de knoppen "vorige", "volgende" enzovoorts niet in voorkomen. Dan kan men alleen maar met jouw "Terug"-knopje terug naar de vorige pagina.

Of denk ik nu te simpel? :P

What do you mean I have no life? I am a gamer, I got millions!


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Morax schreef op 05 januari 2004 @ 23:16:
Is het in dat geval geen idee om de vragenpagina te lanceren in een pop-up schermpje waarin je de hele werkbalk met de knoppen "vorige", "volgende" enzovoorts niet in voorkomen. Dan kan men alleen maar met jouw "Terug"-knopje terug naar de vorige pagina.

Of denk ik nu te simpel? :P
* Erkens zegt nog 1x "toetsenbord-navigatie" :P

overigens, als je de resultaten in een sessie (oid) opslaat moet het helemaal niets uitmaken of je nu terug gaat naar de vorige vraag of niet :)

Acties:
  • 0 Henk 'm!

Verwijderd

Als je erop wilt gokken dat de gebruikers niet hun next-knop gaan gebruiken, zou ik inderdaad voor sessies gaan :)

Je moet dan de post-vars gewoon opslaan in sessie-vars.

Ik heb een tijdje geleden trouwens een script geschreven welk automatisch de post-vars als sessie-vars registreert. Misschien heb je er wat aan.

Je gebruikt de functie als volgt:

form

- hidden field ('hidPage') met als waarde de url v/d vervolgpagina
- adres: de link naar het bestand met onderstaande code

je krijgt dan dus form1 -> het script -> vervolgpagina


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

session_start();

foreach ($_POST as $sFormElementName => $sFormElementValue) 
{       
        //Registreer het formulier-element als een sessie-var en vul het met de bijbehorende waarde
        $_SESSION[$sFormElementName] = $sFormElementValue;
} 

//Schakel door naar de pagina die doorgeven is via een verborgen veld
header("Location: " . $_POST["hidPage"]);
?>

[ Voor 26% gewijzigd door Verwijderd op 06-01-2004 09:16 ]


Acties:
  • 0 Henk 'm!

Verwijderd

 

[ Voor 94% gewijzigd door Verwijderd op 06-01-2004 03:13 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Wat ik ook nog wel eens wil doen is om tijdens het verloop van de enquette de antwoorden tijdelijk in een tabel te stoppen.

Verder is het wellicht handig om een navigatie te maken. Dus dat de mensen zien bij welke stap ze zijn en desnoods op een andere stap kunnen klikken.
(als ik het zo lees is het een wat kromme zin hierboven, maar het komt er op neer dat je boven je enquette gewoon een aantal buttons moet maken met daarop de stap-nummers. Op deze buttons kan men gewoon klikken.

Verder met sessies werken (i.i.g. sessie_id())
Pagina: 1