2016-08-10 31 views
2

我想讓cronjob函數將所有用戶的資金更新爲1,而只有第一行增加並增加9.(有10個用戶)。我嘗試交換for循環的while循環,並得到相同的結果。我嘗試將$ database-> fetch轉換爲mysqli_fetch_array,並得到相同的結果,並將其轉化爲mysqli_fetch_all,爲所有數據庫變量提供「注意:未定義索引://變量名稱\」。解決方法:php while-loop只更新第一行結果

class allusers2 
{ 
    public $id; 
    public $level; 
    public $money; 
    private $database; 

    // Methods (functions) 
    public function __construct($allusers_id, $database) 
    { 
     $this->database = $database; 
     $allusers_id = (int)$allusers_id; 
     $result = $this->database->query("SELECT * FROM `users` WHERE `id`='$allusers_id'"); 
     if($this->database->num_rows($result) == 0) { 
      throw new Exception("allusers does not exist!"); 
     } 

     $allusers = $this->database->fetch($result); 

     $this->id = $allusers['id']; 
     $this->level = $allusers['level']; 
     $this->money = $allusers['money']; 

    } 

    public function update() 
    { 

     $this->database->query("UPDATE `users` SET 
      `level` = '{$this->level}', 
      `money` = '{$this->money}' 
      WHERE `id`='{$this->id}'"); 
    } 
} 

function cronjob() 
{ 
    global $database; 
    global $player; 
    global $self_link; 
    require('allusers2.php'); 
    $result = $database->query("SELECT id FROM `users`"); 
    $allusers_id = $database->fetch($result); 
    $allusers2 = new Allusers2($allusers_id, $database); 
    while($allusers_id = $database->fetch($result)) { 

     $allusers2->money += 1; 
     $allusers2->update(); 
    } 
} 

編輯:下面的代碼解決了這個問題。

$database->query("UPDATE users SET money = money + 1"); 
+0

你應該開始正確縮進你的代碼,使其可讀性。 – Cfreak

+1

小建議。儘量避免使用全局變量。 – nix9

+1

_「我想讓cronjob函數將所有用戶的錢更新爲1」_ - 'UPDATE users SET money = money + 1'並完成。沒有選擇,沒有必要的循環。 (假設通過「所有」你實際上意味着_all_。) – CBroe

回答

1

如果您真的想更新所有記錄,並增加金額相同的數額,那麼你不需要先選擇記錄並循環它們 - 數據庫可以做到這一點f或你在一個去:

UPDATE users SET money = money + 1 
0

你永遠只更新第一個用戶:

$result = $database->query("SELECT id FROM `users`"); 
$allusers_id = $database->fetch($result); // Extract the first user 
$allusers2 = new Allusers2($allusers_id, $database); // Create object for first user 
while($allusers_id = $database->fetch($result)) { 

    $allusers2->money += 1; // Keep updating that first user 
    $allusers2->update(); 
} 

你需要這樣做的第一次提取,並移動到Allusers2循環:

while($allusers_id = $database->fetch($result)) { 

     $allusers2 = new Allusers2($allusers_id, $database); // Now you're creating a new object for each user 
     $allusers2->money += 1; 
     $allusers2->update(); 
    } 
+0

試過,它有相同的問題,除了增加第一行的錢10而不是9。 –