-3

重複の可能性:
mysql killプロセスは、ユーザーが十分なポイントを取得していないPHPです

50ポイントで[PRO]ユーザーにアップグレードできるユーザーシステム付きのポイントシステムがあります。彼らがそれを登録すると、[ユーザー] が私の権利フィールドに自動的に書き込まれます。しかし今、私はそうしたいので、アクションの後に50ポイントを獲得したかどうかを確認し、[ユーザー]を[PRO]に置き換えてから50ポイントを差し引きます。

<?php
session_start();
//=============Configuring Server and Database=======
$host        =    'localhost';
$user        =    'root';
$password    =    '';
//=============Data Base Information=================
$database    =    'login';

$conn        =    mysql_connect($host,$user,$password) or die('Server Information is not Correct'); //Establish Connection with Server
mysql_select_db($database,$conn) or die('Database Information is not correct');

//===============End Server Configuration============

//=============Starting Registration Script==========


$username    =    mysql_real_escape_string($_POST['txtusername']);

//=============To Encrypt Password===================

//============New Variable of Password is Now with an Encrypted Value========


$insert = "UPDATE `users` SET `points` = (`points`-50) WHERE `username` = '".$username."' and points > 50";
mysql_query($insert);
if (mysql_affected_rows() > 1)
{
    // other codes

    $insert = "UPDATE `users` SET `rights` = (`rights` [PRO]) WHERE `username` = '".$username."'";
    mysql_query($insert); 
header('location: succesupgrade.php');
}else{
    echo "You don't have enough points to buy [PRO]";
}


?>

繰り返しますが、人々が [PRO] を購入した後、[ユーザー] が [PRO] に置き換えられるようにしたいと考えています。Aそして、彼らは 50 ポイントを失います。彼らが50ポイントを獲得していない場合。エコーは何かを言います。

4

1 に答える 1

1

1つにまとめてください:

UPDATE `users` 
SET `rights` = '[PRO]', points = points - 50
WHERE 
   `username` = 'somename'
   AND points >= 50
   AND rights != '[PRO]'

そして、影響を受けた行があるかどうかを確認してください。十分なポイントがない場合は更新されず、既に権利を持っている場合も更新されません。これにより、競合状態が回避されます。

于 2012-12-13T18:31:24.353 に答える