我正在开发一个有趣的脚本,用户可以通过为游戏所有者将要显示的每个图像添加点来猜测图像。如果他猜对了,他的分数就会翻倍。如果他没有猜到,积分将被添加到游戏所有者。
在此,提交表单后,用户猜到的图像和图像游戏所有者显示的图像将显示在页面中。之后计算将会发生。
我已正确完成所有步骤,但如果用户从浏览器刷新按钮重新加载页面,则会一次又一次地进行计算。没有得到如何避免这种情况。
我无法使用
header("location: reditect_page.php");
exit();
因为用户应该看到数据。
有人建议我解决这个问题吗?
这是我的提交页面
if(isset($_POST['guess']))
{
//user entered/guessed images
$img1 = $_POST['img1'];
$img2 = $_POST['img2'];
$img3 = $_POST['img3'];
$img1_pnt = $_POST['point1'];
$img2_pnt = $_POST['point2'];
$img3_pnt = $_POST['point3'];
$sn1 = mysqli_query($con, "SELECT * from images where id=".$img1."");
$sn2 = mysqli_fetch_array($sn1);
$mn1 = mysqli_query($con, "SELECT * from images where id=".$img2."");
$mn2 = mysqli_fetch_array($mn1);
$is1 = mysqli_query($con, "SELECT * from images where id=".$img2."");
$is2 = mysqli_fetch_array($is1);
//game Owner's image
$k1 = "SELECT * FROM days_data WHERE id=".$gid." AND lead=".$_SESSION['lead']." ORDER BY id DESC LIMIT 1";
$k2 = mysqli_query($con, $k1);
$k3 = mysqli_fetch_array($k2);
$var1 = $k3['img1'];
$var2 = $k3['img2'];
$var3 = $k3['img3'];
$vararray = array($var1, $var2, $var3);
$s1 = mysqli_query($con, "select * from images where id = ".$var1."");
$s2 = mysqli_query($con, "select * from images where id = ".$var2."");
$s3 = mysqli_query($con, "select * from images where id = ".$var3."");
$q1 = mysqli_fetch_array($s1);
$q2 = mysqli_fetch_array($s2);
$q3 = mysqli_fetch_array($s3);
//Display User guessed images
echo '<div class="row gutter30" style="margin-top:20px;">
<h2>Guessed Data</h2>
<div class="col-xs-4">
<img src="img/'.$mn2['image'].'" class="image" />
</div>
<div class="col-xs-4">
<img src="img/'.$sn2['image'].'" class="image" />
</div>
<div class="col-xs-4">
<img src="img/'.$is2['image'].'" class="image" />
</div>
</div>
//Game Owner's Images
<div class="row gutter30" style="margin-top:20px;">
<h2>RESULT</h2>
<div class="col-xs-4">
<img src="img/'.$q1['image'].'" class="image" />
</div>
<div class="col-xs-4">
<img src="img/'.$q2['image'].'" class="image" />
</div>
<div class="col-xs-4">
<img src="img/'.$q3['image'].'" class="image" />
</div>
//Here i will do the calculations of points
if(($_POST['img1_pnt'])!='')
{
if(in_array($_POST['img1'], $vararray))
{
// Calculations part
}
}
}
答案 0 :(得分:1)
将此代码放在isset提交按钮
之外的php代码的开头if(empty($_SESSION['key']) && !isset($_SESSION['key'])){
$randomkey = rand(0,99999);
$mykey = $_SESSION['key'] = $randomkey
}
它将Session设置为唯一的随机密钥。现在在表单字段中取一个隐藏字段
<input type="hidden" name="key" value="<?=$mykey?>">
现在提交
$mykey
与隐藏变量匹配$mykey
因此,它会阻止用户通过刷新页面多次添加数据。
我希望它有助于...: - )
答案 1 :(得分:0)
您可以使用会话来跟踪用户尝试次数。然后使用此值来阻止用户多次尝试。
在启动会话的代码中,添加以下代码以开始跟踪尝试。
session_start();
if (!isset($_SESSION['attempt_count'])) {
$_SESSION['attempt_count'] = 0;
}
然后,您需要增加用户每次尝试的尝试次数,并防止多次提交。为此,请替换以下代码。
if(isset($_POST['guess']))
{
//user entered/guessed images
$img1 = $_POST['img1'];
$img2 = $_POST['img2'];
$img3 = $_POST['img3'];
使用以下代码。
if(isset($_POST['guess']) && $_SESSION['attempt_count']==0)
{
$_SESSION['attempt_count']++;
//user entered/guessed images
$img1 = $_POST['img1'];
$img2 = $_POST['img2'];
$img3 = $_POST['img3'];
答案 2 :(得分:0)
我希望这就是你要找的东西:
如果我理解正确,如果页面刷新,数据会显示两次,如果刷新3次,类似的数据会显示3次。
这适合我。
include 'action.php';
> echo '<META HTTP-EQUIV=REFRESH CONTENT="1; > '.$_SERVER["PHP_SELF"].'">';
或任何类似的代码。由于您当前位于index.php文件中,因此上面的代码要求刷新不包含表单的action.php文件。希望这会奏效。