我正在开发一个有趣的脚本,用户将通过在游戏所有者将显示的每一张图片点的猜测图像。如果他猜对了,他的分数将加倍。如果他猜不出,就会把分数加到游戏主身上。
在此,提交表单后,用户猜到的图像和游戏所有者显示的图像将显示在页面中。在那之后,计算就会发生。
我已经正确地完成了所有步骤,但是如果用户从浏览器刷新按钮重新加载页面,计算就会一次又一次地发生。不知道如何避免这一切。
我不能用
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
}
}
}发布于 2017-12-27 06:42:32
将此代码放在isset提交按钮之外的php代码的启动中。
if(empty($_SESSION['key']) && !isset($_SESSION['key'])){
$randomkey = rand(0,99999);
$mykey = $_SESSION['key'] = $randomkey
}它将会话设置为唯一的随机密钥。在表单字段中,取一个隐藏字段。
<input type="hidden" name="key" value="<?=$mykey?>">现在提交
$mykey匹配$mykey因此,它通过刷新页面来防止用户多次添加数据。
我希望这能帮上忙..。-)
发布于 2017-12-27 06:47:52
您可以使用会话来跟踪用户尝试计数。然后使用此值防止用户多次尝试。
在开始会话的代码中,添加以下代码以开始跟踪尝试。
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'];发布于 2017-12-27 06:50:43
我希望这就是你想要的:
如果我理解正确,如果页面刷新,数据会显示两次,如果刷新3次,则显示类似的数据3次。
这对我有用。
include 'action.php';echo‘<=刷新CONTENT="1;>’.$_SERVER‘PHP_SELF“.
或者任何类似的代码。由于您当前在index.php文件中,所以上面的代码要求刷新不包含表单的action.php文件。希望这能成功。
https://stackoverflow.com/questions/47987444
复制相似问题