"Back" klikken = form nog eens kunnen posten???
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?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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
}
?>
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
}
?>
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