Form opslaan verwerken aan het einde

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Allard Keij

Allard Keij

09/01/2013 12:21:34
Quote Anchor link
Hallo allemaal,

Ik heb even een vraagje. Ik zoek de juiste manier voor mijn volgend doel.

1. Er verschijnt een vraag met een simpel textvak eronder met een submit knop.
2. Het tekst vak is in te vullen en de gebruiker klikt op submit.
3. De volgende vraag verschijnt op de zelfde manier als hierboven beschreven.
4. Dit gaat 2 minuten lang door. Na 2 minuten worden alle "antwoorden" verwerkt. Oftewel, na 2 minuten zullen alle antwoorden verwerkt worden in een script die het antwoord checkt in de DB e.d.

Nu dat controleren e.d. dat gaat me wel lukken. Ik zit met het feit, dat er een timer moet lopen van 2 minuten, binnen die 2 minuten mag het script geen direct contact maken met de server. Oftewel, er mag na het laden van het script 2 minuten lang geen contact zijn met internet.

Vraag me niet waarom, maar dit is heel crusiaal voor mijn product.

Ik zou niet weten wat de beste oplossing is hiervoor. Zal ik gaan AJAX'en? Javascripten?

Mocht mijn omschrijving hierboven niet helemaal duidelijk zijn, wat een goed voorbeeld is:
"Een quiz, waar je binnen 2 minuten zoveel mogelijk antwoord moet geven op de vragen. Deze vragen komen stuk voor stuk voorbij na het invoeren en drukken op submit. Aan het eind van deze 2 minuten zal het script een nieuw scriptje starten om alle antwoorden te checken in de database. Vervolgens zal de uitslag komen."

Nogmaals, de kern van mijn vraag is puur gericht op deze 2 minuten non-internet activiteit maar toch vragen 1 per keer te laten zien. De rest komt wel in orde.

En zoals gewoonlijk, alvast weer bedankt PHPHulpers!
 
PHP hulp

PHP hulp

20/10/2021 01:59:38
 
Dennis WhoCares

Dennis WhoCares

09/01/2013 12:29:19
Quote Anchor link
Je kan gewoon een sessie opslaan met starttijd. En bij het verwerken huidige tijd -starttijd doen. Lijkt mij, maar misschien zijn er anderen met een betere oplossing?
 
Obelix Idefix

Obelix Idefix

09/01/2013 12:33:24
Quote Anchor link
Met "non-internetactiviteit" bedoel je dat iemand helemaal niets kan/mag op internet, behalve de vragen op jouw site beantwoorden? Dat lijkt me onmogelijk.

Gaat het om de verbinding met de server voor jouw website dan kun je met sessie werken. Maar begrijp het niet goed. Als jij in je script geen verbinding maakt met de server/database (na het ophalen van de vragen), dan is het toch opgelost?
 
Erwin H

Erwin H

09/01/2013 12:36:16
Quote Anchor link
Ten eerste, als je verschillende vragen wilt tonen, zonder dat de pagina herladen mag worden, dan ben je al zo'n beetje gebonden aan javascript. Het tonen van een nieuwe vraag zal je dan namelijk in de browser moeten oplossen => javascript.

Ten tweede, binnen javascript kan je een timer zetten op twee minuten, zodat twee minuten na het initieel laden van de pagina er een functie wordt gestart die de vragen gaat controleren via een servercall.

Dat laatste kan je ofwel via een Ajax call doen binnen de pagina, of je kan gewoon een form submitten waarin je alle antwoorden op de vragen (in een hidden input) hebt staan.
 
Kris Peeters

Kris Peeters

09/01/2013 13:44:00
Quote Anchor link
Ja, dit kan inderdaad uitgewerkt worden.
Dat valt wel mee, qua complexiteit.

Allard Keij op 09/01/2013 12:21:34:
... Zal ik gaan AJAX'en? Javascripten?...


(Je weet dat de j van Ajax staat voor javascript?)
Sowieso javascript, ja.
De vraag is of je Ajax nog nodig hebt.

Zonder Ajax: je stuurt alle vragen in 1 keer, in 1 <form>. Javascript maakt om de twee minuten 1 vraag zichtbaar en de rest onzichtbaar. De antwoorden worden bijgehouden en na de laatste vraag wordt het formulier verstuurd.

Met Ajax: om de twee minuten (ready or not) haalt javascript een nieuwe vraag van de server. Elke vraag wordt apart naar de server gestuurd (de gebruiker merkt dat niet).

De versie met Ajax lijkt me beter beschermd tegen vals spelen; en geeft je (de scripter) meer controle.
 
Allard Keij

Allard Keij

09/01/2013 15:22:29
Quote Anchor link
Bedankt voor alle reacties!

Ik zal nog even mijn verhaal iets duidelijker doen.

Om misschien wat meer duidelijkheid te geven over de 2 minuten. Beeld je in dat het geen aanvraag formulier is, een offerte aanvraag of iets dergelijks, denk meer in de trant van een game. De 2 minuten waar ik het over heb is puur en alleen de tijd die je er over mag doen. Na deze 2 minuten is je "ronde" klaar en komt de uitslag. Binnen deze 2 minuten krijg je vragen, stuk voor stuk. Pas als de ene vraag beantwoord is, goed of fout, komt de volgende vraag. Dit 2 minuten lang. Stel je hebt dus 5 vragen gedaan binnen 2 minuten.. In vraag 6 is de tijd om ( 2 minuten ). Het script plukt je automatisch van de pagina af, kijkt of de antwoorden goed zijn en vervolgens ziet de eindgebruiker het resultaat.

Dit:
Zonder Ajax: je stuurt alle vragen in 1 keer, in 1 <form>. Javascript maakt om de twee minuten 1 vraag zichtbaar en de rest onzichtbaar. De antwoorden worden bijgehouden en na de laatste vraag wordt het formulier verstuurd.

Klinkt aardig in de buurt. Dan alleen moeten de "verborgen" vragen niet zichtbaar worden na 1 minuut, maar juist na het klikken op de submit knop.

Om nog even de onduidelijkheid over "non-internet" uit de lucht te helpen. Daarmee bedoel ik, dat deze vragen dus eerst ingeladen worden en ze vervolgens ingevuld kunnen worden zonder de pagina te herladen na elk gegeven antwoord. Om het nog simpeler neer te zetten. Zie het als een CV. Je zet eerst al je werkervaring neer, en dan print je het pas uit. Je typt je ervaring per onderwerp in, maar je print ze niet na elk onderwerp uit.

Zoals ik het nu zelf in mijn hoofd heb, na het lezen van jullie antwoorden, zal het dus inderdaad neerkomen op:

Javascript, die enkele vragen in zijn pagina laad. Vervolgens zie je vraag 1. Je typt het antwoord en klikt op submit. Vraag 1 word verborgen en vraag 2 komt tevoorschijn.

Waar mijn (kennis ontbreekt) probleem zit is in het feit dat het antwoord, gegeven op vraag 1, onthouden moet worden. Vervolgens, na deze 2 minuten moeten alle antwoorden dus in het script bekend zijn en dan mag het script weer refreshen of verder gaan naar een ander script ( oftewel de internet verbinding mag er weer wezen ).

Alvast bedankt weer!
 
No One

No One

09/01/2013 15:29:52
Quote Anchor link
als het een game wordt en het antw kan goed of fout zijn...dan zou ik de antwoorden niet willen plaatsen in de html/javascript kant maar toch met ajax controleren....

1. vraag 1 komt te voorschijn, user antwoord en drukt op submit
2. achterliggende script verstuurd het antwoord naar de server
3. de server geeft aan of de vraag goed is of fout... is de vraag goed, komt gelijk de volgende vraag mee
4. in de sessie sla je de antwoorden op.
5. in de sessie staat ook de starttijd. iedere keer dat een vraag beantwoord is wordt de tijd meegestuurd. om het aan de clientside te syncen. als de tijd daar afgelopen is, kun je daar doormiddel van window.location naar de resultatenpagina door laten sturen.
controleer serverside goed of het antwoord nog binnen de tijd valt, zo nee...dan sla je het antwoord niet op...

javascript is altijd te manipuleren...wat voor data er ook teruggegeven wordt van de serverkant..dus alles serverside controleren en zorgen dat alles wat clientside gedaan wordt de flow aan de serverside niet kapot kan maken.
 
Kris Peeters

Kris Peeters

09/01/2013 15:38:18
Quote Anchor link
Ja, dat zou ik ook doen.
Gewijzigd op 09/01/2013 15:38:47 door Kris Peeters
 
Allard Keij

Allard Keij

09/01/2013 15:51:35
Quote Anchor link
No One, bedankt voor je antwoord! Nu snap ik ieder zijn zorgen voor de veiligheid tot opslaan.

Hier hoeft geen rekening mee gehouden te worden. Het word namelijk een web-app voor android.

Oftewel er zal geen mogelijkheid zijn voor users om javascript te manipuleren. Sterker nog, al is er een mogelijkheid tot manipuleren van javascript op android, dan heeft de speler hier totaal geen voordeel mee.. Het is een game die je in 2 minuten moet afronden door zoveel mogelijk vragen goed te antwoorden.. Om hier als scripter mee aan de slag te gaan ben je waarschijnlijk nog eerder je punten kwijt dan goed.

Ondanks dit alles, je plan van aanpak klinkt goed, stap 2 wil ik dus juist voorkomen.

Reden: Ik heb deze game al eerder uitgewerkt. Door te veel connectie te maken met een scriptje op de achtergrond kregen spelers met een trage mobiele internetverbinding laadproblemen. Deze wil ik dus eruit werken door pas op het einde de hele boel er doorheen te gooien.
 
Erwin H

Erwin H

09/01/2013 15:54:52
Quote Anchor link
Volgens mij maakt het weinig uit of je elk antwoord apart opstuurt naar de server, of dat je ze allemaal even in een array in het geheugen houdt en dan alles tegelijk verstuurt. Sterker, clientside houden lijkt me makkelijker, hoef je maar 1 aanroep naar de server te doen. Wat als je anders 1 miliseconde voor het verstrijken van de tijd nog een antwoord verstuurd dat dan net te laat de server haalt als de pagina wordt gerefreshed aan het einde van die quiz. Ajax is asynchroon, dus er is geen enkele zekerheid dat alle tussencalls op tijd de server bereiken.

Ik zou het allemaal op de client houden en na 2 minuten gewoon een form versturen dat de server verwerkt, antwoorden bekijkt en het resultaat terugstuurt.
 
Allard Keij

Allard Keij

09/01/2013 16:19:41
Quote Anchor link
"Ik zou het allemaal op de client houden en na 2 minuten gewoon een form versturen dat de server verwerkt, antwoorden bekijkt en het resultaat terugstuurt."

Dat dus :-). Dat is precies wat ik wil bereiken. Alles even houden en na de 2 minuten versturen. Zodat er in deze 2 minuten geen problemen kunnen komen bij bijv. een traag verbindingsmomentje tussen toestel en 3G.

Dat is het hele probleem wat ik ervaring heb in het maken van web-apps. De bedoeling is dat er zo weinig mogelijk verbinding gemaakt moet worden. Sterker nog dit alleen wanneer nodig.

Dit is de typische reden waarom ik niet na elk antwoord, het script de server direct wil laten checken. Bij de kleinste vertraging gaat de web-app "Loaden". Dit moet je niet willen als speler.

Nu is dus mijn vraag, hoe krijg ik het met javascript voor elkaar om vraag na vraag te laten zien en op te slaan tot het einde.

Ik hoef geen heel script te zien, maar heeft iemand misschien wat linkjes naar nuttige sites, of wat kleine scriptjes die makkelijk te verwerken zijn? Heb zelf ook wel wat ge-googled maar misschien dat iemand dit soort objecten ooit al voor z'n kiezen heeft gehad en me er goed bij kan helpen.

Allemaal alweer bedankt!
 
No One

No One

09/01/2013 16:21:26
Quote Anchor link
zelfs op android valt er te manipuleren...ik kan mijn google chrome browser ook aan de server laten vertellen dat ie een android telefoon is...
 
Allard Keij

Allard Keij

09/01/2013 16:29:13
Quote Anchor link
Ja snap ik. Ik begrijp je zorgen. Maar wat wil een "kwade" gebruiker nou echt doen. Een ronde stiekem 1000 minuten maken en een dikke score neerzetten.. Een script die dagelijks checkt op opvallende gebeurtenissen en voilla, weg is de gebruiker.

Het is de moeite niet waard in deze game om vals te gaan spelen. Iemand die de locatie van het spel uit gaat zoeken, vervolgens zijn browser opent en daar naartoegaat, vervolgens gaat manipuleren om een score te halen in deze game.. In theorie mogelijk, maar totaal waardeloos voor de speler.
 
No One

No One

09/01/2013 16:35:25
Quote Anchor link
Er worden geen prijzen gewonnen ofzoiets? dus eigenlijk heeft je programmatuur geen nut?
 
Allard Keij

Allard Keij

09/01/2013 16:36:29
Quote Anchor link
Jawel er zijn genoeg leuke dingen in de game die er verdiend kunnen worden e.d. Maar uiteindelijk blijft het allemaal virtueel, de taak aan mij is dan om het eerlijk en leuk voor de andere te houden. Schade zal er niet bij komen kijken.
 
No One

No One

09/01/2013 16:39:20
Quote Anchor link
maar goed dat ze dat van WoW en Runescape niet zo denken...
 
Kris Peeters

Kris Peeters

09/01/2013 16:53:54
Quote Anchor link
Oudere spelletjes wel.
Als je Tetris uitspeelt, Mario Bros., Turrican (Commodore 64 :) ), ... Wat gebeurt er dan?
Niets.
Je krijgt hoogstens de credits te zien (zoals de cast & crew na een film).
En dan kan je opnieuw beginnen. Of niet.
Gewijzigd op 09/01/2013 16:54:37 door Kris Peeters
 
Allard Keij

Allard Keij

09/01/2013 17:12:28
Quote Anchor link
Anyways, ik ga het nog wat verder proberen.

Bedankt allemaal.
 
Donny Wie weet

Donny Wie weet

09/01/2013 19:14:14
Quote Anchor link
Allard Keij op 09/01/2013 16:29:13:
Ja snap ik. Ik begrijp je zorgen. Maar wat wil een "kwade" gebruiker nou echt doen. Een ronde stiekem 1000 minuten maken en een dikke score neerzetten.. Een script die dagelijks checkt op opvallende gebeurtenissen en voilla, weg is de gebruiker.

Het is de moeite niet waard in deze game om vals te gaan spelen. Iemand die de locatie van het spel uit gaat zoeken, vervolgens zijn browser opent en daar naartoegaat, vervolgens gaat manipuleren om een score te halen in deze game.. In theorie mogelijk, maar totaal waardeloos voor de speler.


Hoi Allard,

Je hebt het over een script dat controleert of er vals gespeeld wordt... Dit kan inderdaad wel, maar stel de nummer 1 van die dag/week/maand/jaar heeft 11 punten, dan kan de gebruiker altijd nog gaan voor 12 of 13 punten... Vals spelen kan hoe dan ook... Het is inderdaad opvallend als je 1000 punten hebt in 2 minuten, dat is onmogelijk... Als je vals spelen wilt volkomen, dan moet je denken in de vorm van een vals speler. Net als het feit: wil je je winkel beveiligen tegen diefstal, denk dan als een dief. Je lost niet ALLES op, maar wel een heel groot stuk.

Daarnaast wil je een timer gaan inbouwen. Ik heb een Blackberry Curve 8520, die laad tijd is zo ontzettend lang voor een web pagina, dus sowieso zou ik minder vragen kunnen beantwoorden dan iemand met een iPhone of een Galaxy. Het antwoord "Ja dan moeten ze maar een goede telefoon hebben" wil je zelf ook voorkomen. Is er niet een optie dat je het baseert op verbindings type/telefoon type en dan een timer erin zet? Dit is slechts een idee, wat je ermee doet is up 2 you :)
 
Allard Keij

Allard Keij

09/01/2013 19:26:42
Quote Anchor link
Donny,

Bedankt voor je antwoord.

Wat je zegt klopt helemaal. Het grote verschil is. Voor elk juist antwoord worden punten uitgedeeld. Het aantal punten dat de gebruiker krijgt voor een goed antwoord staat vastgekoppeld aan de vraag in de database.

In het kort. Iemand speelt 10 rondes. 10 goede antwoorden. Een totaal te halen van bijv 34 punten. Heeft de gebruiker meer gekregen dan 34 punten ziet mijn script dit en laat bij mij een belletje rinkelen. Het is namelijk niet mogelijk om meer dan dat aantal punten te halen. Gebeurd dit wel gaat mijn alarm af ;-)!

Klopt, dat is dus het lastige van een web-app. Het werkt perfect maar die internetverbinding is gewoon nog niet sterk genoeg in deze tijd om alles binnen een seconde te laden ( op wifi na ). Het word zowiezo een Android app, maargoed dan zijn er nog 4000 elementen waar je rekening mee moet houden.

Ondanks dat alles test ik het inderdaad op verschillende telefoons. In het totaal heb ik een app of 140 ontwikkeld met succes, maar nog niet games met dit soort functies allemaal.

In de tussentijd heb ik mijn oplossing al gevonden!

Nu zit ik alleen nog even met de timer in mijn hoofd. Ik kan heel wat googlen en vind aardig wat leuke scriptjes alleen geen enkel script die zo mijn oplossing bied.

Helaas ook niet de kennis om deze "oplossing" zelf er in te coderen.

Heeft iemand voor mij een simpel javascriptje die bij het begin van de pagina 2 minuten in gedachten neemt, de tijd die nog over is vervolgens ook visueel laat zien aan de gebruiker, en na die 2 minuten een functie uitvoerd? Bijvoorbeeld een stukje php?

Alvast bedankt weer allen!

EDIT:

Heb dit scriptje gevonden: http://jsfiddle.net/NfLAB/

Dat lijkt me precies wat ik nodig heb. Nu is de vraag hoe ik een stukje php laat draaien nadat de timer afgelopen is.
Gewijzigd op 09/01/2013 19:30:25 door Allard Keij
 
Co Vanenwijk

Co Vanenwijk

09/01/2013 19:32:26
Quote Anchor link
Misschien denk ik te simpel, en weet ook niet helemaal of dit de juiste mogelijkheid is...
maar wat als je gebruik maakt van een if functie?

Bij de eerste vraag maak je een cookie (of iets dergelijks met daarin de tijd van het moment van starten.)

Wanneer de invuller drukt op submit gaat er vergelijking werken:

IF(Tijdcookie+2min<tijdnu){Submit naar volgende vraag}else {Naar eindscorepagina}


Misschien dat echte PHP kenner op dit idee kunnen verderborduren ;)
Ik probeer alleen maar mee te denken ;)
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.