2017-12-27 3 views
0

私は、ゲームの所有者が表示する画像ごとにポイントを入れて画像を推測する楽しいスクリプトを開発しています。彼が正しいと推測すれば、彼のポイントは2倍になります。彼が推測に失敗した場合、ポイントはゲームの所有者に追加されます。複数回データを追加することを避けることによってページを更新する

この場合、フォームを送信すると、ユーザーが推測した画像とゲームの所有者が表示する画像がページに表示されます。その後、計算が行われます。

私はすべての手順を正しく行っていますが、ユーザーがブラウザの更新ボタンからページを再読み込みすると、計算が何度も繰り返されます。これを避ける方法はありません。

ユーザーがデータを見るべきであるとして、私は

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

一時記憶領域データ用にクッキーを使用する – Deep

+0

[考えられる解決法](https://stackoverflow.com/questions/6320113/how-to-prevent-form-resubmission-when-page-is-refreshed-f5-ctrlr) –

+0

私が試みた最善の方法は、セッションをキーとして使用しています。 – TarangP

答えて

0

外PHPコードの開始にこのコードを入れて、セッションに固有のランダムなキーを設定し、ボタン

if(empty($_SESSION['key']) && !isset($_SESSION['key'])){ 
    $randomkey = rand(0,99999); 
    $mykey = $_SESSION['key'] = $randomkey 
} 

を提出ISSET。今のフォームフィールドに

<input type="hidden" name="key" value="<?=$mykey?>"> 

今で

  1. まずだから防ぐ特定のアクションを設定解除$mykey

を実行した後に隠れ変数

  • で現在$mykeyマッチをチェックを提出する1つの隠れ場を取りますユーザーは、ページを更新することによってデータを複数回追加します。私はそれが役に立てば幸い

    ... :-)

  • +0

    私はこれを試しています。しかし、ちょうど私がこのコードを配置するところで混乱している:( はこのように置かれたフォームに置かれている '' ' – user3542048

    +0

    はい、この非表示フィールドをフォーム – TarangP

    +0

    @ TarangPに入れてくださいありがとうございました – user3542048

    0

    あなたはユーザーの試行回数を追跡するためにセッションを使用することができます。次に、この値を使用して、ユーザーが複数回試みることを防止します。

    セッションを開始するコードで、次のコードを追加して追跡の試行を開始します。

    次に、ユーザーの試行ごとに試行回数を増やし、複数の送信を防止する必要があります。このために、次のコードを置き換えます。

    if(isset($_POST['guess'])) 
    { 
        //user entered/guessed images 
        $img1 = $_POST['img1']; 
        $img2 = $_POST['img2']; 
        $img3 = $_POST['img3']; 
    

    以下のコードを使用してください。

    私が正しくあなたを理解していれば、ページが更新された場合、データが二回表示され、それが3回を更新した場合、同様のデータが表示される:私は、これはあなたが探しているものであると思います

    if(isset($_POST['guess']) && $_SESSION['attempt_count']==0) 
    { 
        $_SESSION['attempt_count']++; 
    
        //user entered/guessed images 
        $img1 = $_POST['img1']; 
        $img2 = $_POST['img2']; 
        $img3 = $_POST['img3']; 
    
    +0

    ありがとう私は十分な評判を持っていないので、upvoteできません。 – user3542048

    +0

    @ user3542048問題はありません:) – Vivek

    0

    3回。

    これは私のために働く。

    1. index.phpの中にフォームを入れ
    2. は別file.g.であなたのアクションコードとディスプレイを置きますあなたはinclude 'action.php';
    > echo '<META HTTP-EQUIV=REFRESH CONTENT="1; 
    > '.$_SERVER["PHP_SELF"].'">'; 
    
    のようなあなたのindex.phpファイルでのアクション・ファイルが含まれていることを確認してください
  • :あなたはこのコードを使用してファイルを終了することを確認してください、あなたのaction.phpファイルで
  • をaction.php
  • または任意のコードです。あなたは現在あなたのindex.phpファイルにいるので、上記のコードはあなたのフォームを含んでいないaction.phpファイルを更新するように頼みます。これがうまくいくと思っています。

    関連する問題