"Back" klikken = form nog eens kunnen posten???

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sure Is

Sure Is

09/08/2011 16:32:25
Quote Anchor link
Hallo,
Ik heb de volgende situatie:
Ik laat de bezoekers een spel spelen op index.php.
Wanneer het spel afgelopen is verschijnt er (nog steeds op index.php) een input button om de score te bewaren.
Dit is een form dat als hidden value de score meestuurt naar highscore.php.
Op highscore.php wordt nu de score in de database geplaatst, en wordt de highscore table getoond.

Ik heb gezien dat als je (eens terecht gekomen op highscore.php) met Firefox op "back" klikt (dus om een pagina terug te gaan), hij weliswaar terug gaat naar index.php, maar naar het moment wanneer het spel al afgelopen was! M.a.w. kan de bezoekers nogmaals op "bewaar mijn score" drukken, en zo oneindig veel keer die score toevoegen, en dat mag uiteraard niet!

Chrome keert wel gewoon terug naar index.php, bij het begin van het spel.

Iemand die weet hoe ik dit kan oplossen?
 
PHP hulp

PHP hulp

19/04/2024 04:18:16
 
B a s
Beheerder

B a s

09/08/2011 17:08:59
Quote Anchor link
Door bijvoorbeeld een $_SESSION te zetten wanneer de score wordt geplaatst. Zodra er op de 'bewaar score' knop wordt geklikt, hoef je enkel een extra check in te bouwen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
session_start(); // helemaal bovenaan je pagina, dus ook boven je HTML en includes

if ($_SERVER['REQUEST_METHOD'] == 'POST')
{

    if (!empty($_SESSION['antiflood']))
    {

        $seconde = 20; // 20 seconden wachten voordat hij nog een x een score mag posten
        $tijd = time() - $_SESSION['antiflood'];
        if($tijd < $seconde)
            $antiflood = 1;
    }
}


if ($_SERVER['REQUEST_METHOD'] == 'POST' && empty($antiflood))
{

 $_SESSION['antiflood'] = time();
 // invoegen in database
}
else
{
 // spel formulier laten zien
}
?>
 
Sure Is

Sure Is

09/08/2011 17:12:47
Quote Anchor link
Dat werkt wel, maar dan hoeft de gebruiker enkel 20seconden te wachten, en dan kan hij weer dezelfde score posten. Bovendien, als ik de tijd op zou drijven, kan de gebruiker niet nog een keer een nieuwe score posten binnen die tijd, en dat moet natuurlijk wel kunnen.

Ik heb het opgelost door een random nummer van 15 cijfers mee te plaatsen in de database,
en voor het plaatsen van de gegevens in de database eerst te checken of dit getal al in de database zit.

Werkt perfect, al is het nogal onorthodox :)
Gewijzigd op 09/08/2011 17:13:15 door Sure Is
 



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.