首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过刷新页面避免多次添加数据

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

Stack Overflow用户
提问于 2017-12-27 06:32:41
回答 3查看 339关注 0票数 1

我正在开发一个有趣的脚本,用户将通过在游戏所有者将显示的每一张图片点的猜测图像。如果他猜对了,他的分数将加倍。如果他猜不出,就会把分数加到游戏主身上。

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

我已经正确地完成了所有步骤,但是如果用户从浏览器刷新按钮重新加载页面,计算就会一次又一次地发生。不知道如何避免这一切。

我不能用

代码语言:javascript
运行
复制
header("location: reditect_page.php");
exit();

因为用户应该看到数据。

有人能建议我解决这个问题吗?

这是我的投稿页面

代码语言:javascript
运行
复制
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
}
}
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-12-27 06:42:32

将此代码放在isset提交按钮之外的php代码的启动中。

代码语言:javascript
运行
复制
if(empty($_SESSION['key']) && !isset($_SESSION['key'])){
  $randomkey = rand(0,99999);
  $mykey = $_SESSION['key'] = $randomkey
}

它将会话设置为唯一的随机密钥。在表单字段中,取一个隐藏字段。

代码语言:javascript
运行
复制
<input type="hidden" name="key" value="<?=$mykey?>">

现在提交

  1. 首先用隐藏变量检查当前的$mykey匹配
  2. 在执行某些动作后取消设置$mykey

因此,它通过刷新页面来防止用户多次添加数据。

我希望这能帮上忙..。-)

票数 1
EN

Stack Overflow用户

发布于 2017-12-27 06:47:52

您可以使用会话来跟踪用户尝试计数。然后使用此值防止用户多次尝试。

在开始会话的代码中,添加以下代码以开始跟踪尝试。

代码语言:javascript
运行
复制
session_start();
if (!isset($_SESSION['attempt_count'])) {
  $_SESSION['attempt_count'] = 0;
}

然后,您需要增加用户每次尝试的次数,并防止多次提交。为此,请替换以下代码。

代码语言:javascript
运行
复制
if(isset($_POST['guess']))
{
  //user entered/guessed images
  $img1 = $_POST['img1'];
  $img2 = $_POST['img2'];
  $img3 = $_POST['img3'];

下面的代码。

代码语言:javascript
运行
复制
if(isset($_POST['guess']) && $_SESSION['attempt_count']==0)
{
  $_SESSION['attempt_count']++;

  //user entered/guessed images
  $img1 = $_POST['img1'];
  $img2 = $_POST['img2'];
  $img3 = $_POST['img3'];
票数 1
EN

Stack Overflow用户

发布于 2017-12-27 06:50:43

我希望这就是你想要的:

如果我理解正确,如果页面刷新,数据会显示两次,如果刷新3次,则显示类似的数据3次。

这对我有用。

  1. 将表单放在index.php中
  2. 将您的操作代码和显示放在另一个文件中。action.php
  3. 在action.php文件中,请确保以以下代码结束该文件:
  4. 确保将操作文件包括在index.php文件中,如include 'action.php';

echo‘<=刷新CONTENT="1;>’.$_SERVER‘PHP_SELF“.

或者任何类似的代码。由于您当前在index.php文件中,所以上面的代码要求刷新不包含表单的action.php文件。希望这能成功。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47987444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档