0

こんにちは、私のコードを見ていただきありがとうございます!

2人のユーザーが同時に2つのフォームを送信すると、問題に直面しています。詳しく説明してみます。

私のフォームは 3 つのユーザー値を更新する必要があります。

私のphp:

<?php
set_time_limit(60);
if (isset($_POST['submit-buy'])) {
    $buy_id = $_POST['buy_id'];
    $buyer_id = $_POST['buyer_id']; 
    $buy_value = $_POST['buy_value'];
    $owner_id = $_POST['owner_id']; 

    // more function goes here and returns value below i am also using if else to check if any value change it gives error msg to slow down
    // $petvalue = 100000;
    // $pet_earn = 5500;
    // $check_petcash = 10000000;
    // $pet_newvalue = 110000;
    // $pet_updateoid = 1;
    // $pettobuy = 2;

    // first

    $check_petcash = $pet_user->cash;    //checking before updating
    $pet_newcash = round($check_petcash + $pet_earn);            // pet new cash        
    $upet_newvalue = mysql_query("UPDATE members SET value='$pet_newvalue', cash='$pet_newcash', ownerid='$pet_updateoid' WHERE id='$pettobuy'");       

    // second
    // $old_owner = 3;

    $ex_owner_cash = $oldowner->cash;    //checking before updating     
    $ex_owner_newcash = round($ex_owner_cash + $petvalue + $pet_earn);  // old owner cash               
    $update_newcash = mysql_query("UPDATE members SET cash='$ex_owner_newcash' WHERE id='$old_owner'"); 

    // and last
    // $pet_buyvalue = 120000;
    // $user_id = 1;

    $new_user_cash = $new_owner->cash;      //checking before updating 
    $new_ownercash = round($new_user_cash - ($pet_buyvalue - $pet_earn));  // user cash         
    $upadte_ownercash = mysql_query("UPDATE members SET cash='$new_ownercash' WHERE id='$user_id'");

    $msg = '<span id="other-info-font">You bought pet yay!</span><br/>';        
}
?>

主な問題は、2 人のユーザーが同時にフォームを送信し、1 人が高速ネットを使用し、もう 1 人がそうでない場合に発生します。いつか $new_ownercashをカットします。1 番目と 2 番目のクエリのみが更新され、3 番目のクエリは変更されないままになるか、他のユーザーがフォームを送信すると (2 番目と 3 番目のクエリですべての計算がうまくいかないことを意味します)。私は多くのユーザーを抱えており、ゲームの購入と販売を行っています。ベータ テストを行っているため、まだ修正する時間があります。

すべてのユーザーが同時にゲームをプレイすると、すべてが台無しになります。私はこれが初めてなので、手がかりです。

ありがとう

4

1 に答える 1

0

変数に値が指定されていません$old_owner! 同上$user_id

ところで - mysql_ ライブラリは非推奨であるため、使用を中止してください。SQL インジェクションも調べてください。これは危険であり、スクリプトは可能性に満ちています。

編集

2 回目と 3 回目の更新で同じWHERE句を使用しています。したがって、スクリプトを「同時に」実行するかどうかは、テーブルがどのように更新されるかによって異なります。

確か$old_owner$user_id、スクリプトの 2 つの同時実行では異なるはずですか?

于 2013-03-13T05:39:13.263 に答える