通过刷新页面避免多次添加数据

时间:2017-12-27 06:32:42

标签: php

我正在开发一个有趣的脚本,用户可以通过为游戏所有者将要显示的每个图像添加点来猜测图像。如果他猜对了,他的分数就会翻倍。如果他没有猜到,积分将被添加到游戏所有者。

在此,提交表单后,用户猜到的图像和图像游戏所有者显示的图像将显示在页面中。之后计算将会发生。

我已正确完成所有步骤,但如果用户从浏览器刷新按钮重新加载页面,则会一次又一次地进行计算。没有得到如何避免这种情况。

我无法使用

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
}
}
}

3 个答案:

答案 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?>">

现在提交

  1. 首先检查当前$mykey与隐藏变量匹配
  2. 执行某项操作后取消设置$mykey
  3. 因此,它会阻止用户通过刷新页面多次添加数据。

    我希望它有助于...: - )

答案 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次。

这适合我。

  1. 将表单放入index.php
  2. 将您的操作代码和显示放在另一个文件中。 action.php的
  3. 在action.php文件中,请确保使用以下代码结束文件:
  4. 确保将您的操作文件包含在index.php文件中,例如include 'action.php';
  5. >  echo '<META HTTP-EQUIV=REFRESH CONTENT="1;
    > '.$_SERVER["PHP_SELF"].'">';
    

    或任何类似的代码。由于您当前位于index.php文件中,因此上面的代码要求刷新不包含表单的action.php文件。希望这会奏效。