1

私は、ユーザーが入札してオークションに勝ったことができるオークション サイトに取り組んでいます。私の場合、入札が終了した時点でオークションは終了します (管理者から設定された入札数)。だから私は最終的な入札についての提案が必要です. 最終的な入札が 2 人の異なるユーザーによってまったく同時に行われた場合はどうなりますか?

現在、誰かが入札ボタンをクリックすると、リクエストを ajax に送信し、そこにレコードを挿入しています。私が知っている唯一の方法は、データベースから確認し、残りの入札数を確認してそれに応じて挿入することです (1 人のユーザーを許可することにより) が、時間がまったく同じ場合は例外が発生する可能性があります。その間、入札が遅れてトラブルが増える可能性があるため、データベースのクエリに時間を無駄にしたくありません。

これが入札を行う私のphpコードです。

$cid = $_GET['cid'];

$uid = $_GET['uid'];
$pid = $_GET['pid'];
$type = $_GET['type'];
$date = date("Y-m-d H:i:s");

$placeBid = $obj->insert("bids",array("productid"=>$pid,"userid"=>$uid,"coinsid"=>$cid,"type"=>$type,"date"=>$date));

if($placeBid)
{
  //if bid is successfull, update the status of coins in coins table.
  $obj->update("coins","status=? where id=?",array(0,$cid));
  //Also update bid counts in product table, to ensure the bids placed on specific product
  if($type == 'paid')
  {
      $obj->update("products","bidscount=bidscount+1 where id=?",array($pid));
   }
  //check if still coins are left with user

            //get bid coins for current user.
    $bidCoins = $obj->select("coins","*","userid=? and status=?",array($userid,1));

    if($bidCoins)
    {

        $coinsHtml = '<a href="#"class="close"/>X</a>

            <div class="coins_popup"> 

            <h3>Select your coins box and bid</h3>';

        foreach((array)$bidCoins as $bidCoinsR)
        {
            $b = ($bidCoinsR['type'] == 'free')?"(B)":"";

                if($bidCoinsR['type'] == 'free')
                {
                    $type = 0;
                }
                else if($bidCoinsR['type'] == 'paid')
                {
                    $type = 1;
                }
            $coinsHtml .= '<a href="javascript:void(0)" onclick="placeBid('.$bidCoinsR["id"].','.$bidCoinsR["userid"].','.$type.')"><span>'.$bidCoinsR["amount"].$b.'</span></a>';
        }
        $coinsHtml .= '<input type="hidden" id="product_id" value="" name="product_id">';
        echo $coinsHtml .= '</div>';

    }
    else
    {
        echo 'You have no more coins available';
    }

 }

最善の方法を教えてください。ありがとう

4

1 に答える 1