1

cron経由で実行するphpファイルがあります。テストのために、1 時間ごとに実行するように設定しましたが、通常は 1 日に 1 回実行されます。私が望むのは、プレイヤーが autotechrefinery フィールドを 1 に設定している場合、人口、所有するお金、研究用品、および技術をテーブルから引き出す必要があるようにすることです。

そこから、私が望むのは、500 の研究用品を差し引き、50 の技術を追加し、人口の 10% をお金から差し引くことです。ファイルを手動で実行すると、これらすべてが機能しているように見えますが、cron 経由で自動的に実行すると、テクノロジーが 50 に設定され、researchsupplies が -500 に設定され、money が 0 に設定されるという問題があります。 .

$refCheck = mysql_query("SELECT * FROM players WHERE autotechrefinery='1'");
while($rC = mysql_fetch_array($refCheck)) {

$nation = $rC['nation'];
$pop = $rC['population'];
$rsupplies = $rC['researchsupplies'];
$cash = $rC['money'];
$tech = $rC['technology'];

$newtech = $tech+50;
$newmoney = $cash-($pop*.1);
$newsupplies = $rsupplies-500;

mysql_query("UPDATE players SET money='$newmoney', technology='$newtech', researchsupplies='$newsupplies', techbought='1' WHERE autotechrefinery='1'"); }
4

1 に答える 1

2

コードのバグは次のとおりです。UPDATE は常にすべてのエントリを更新します。したがって、すべてのエントリは、ループの最後のパスに割り当てられた値を取得します。

コードを修正するには、行を識別して更新で使用するための ID が必要です。

$refCheck = mysql_query("SELECT * FROM players WHERE autotechrefinery='1'");
while($rC = mysql_fetch_array($refCheck)) {   
  $ID = $rC['id'];
  $nation = $rC['nation'];
  $pop = $rC['population'];
  $rsupplies = $rC['researchsupplies'];
  $cash = $rC['money'];
  $tech = $rC['technology'];

  $newtech = $tech+50;
  $newmoney = $cash-($pop*.1);
  $newsupplies = $rsupplies-500;

  mysql_query("UPDATE players SET money='$newmoney', technology='$newtech', researchsupplies='$newsupplies', techbought='1' WHERE id="$ID');
}

改善を求めることはありませんでしたが、1 つの SQL ステートメントで同じ結果を得ることができました。

UPDATE players set money=money - population * .1, technology = technology + 50, researchsupplies = researchsupplies - 500;
于 2012-12-22T12:12:17.083 に答える