0

ここに画像の説明を入力 ここに画像の説明を入力

私は今、数時間立ち往生している質問があります。さまざまな種類の for() および while() ループをいじってみました。それらをさまざまな変数でさまざまな場所に配置し、さまざまなことを実行しましたが、何も機能しませんでした..

私の質問:

私のプログラムが最初のユーザーより下のすべてのユーザーに同じレベルを与えているのはなぜですか? 写真を見ると、Nicolas の方がはるかに多くの XP を持っていることがはっきりとわかります。(5,000 xp はレベル 20 であり、「Nic5」がデータベースの最初にある場合、「スキル レベル」が 20 に変更されます。

返される変数$lvlは、読み込まれる各プレーヤーで変化しないことがわかっています。これが、各プレーヤーが最初のプレーヤーのレベルを取得する理由です。

誰でもこれで私を助けてくれますか?

注: 0= プレイヤーのスキル レベルの経験を保持する列。

クラス calculatelevel :

class calculatelevel {

function level($skillnum)
{

$host = "*";
$user = "*";
$pass = "*";
$db = "*";

$con = new mysqli($host, $user, $pass, $db) or die($con->error);
$res = $con->query("SELECT `0` FROM hiscores");

$max = 99;

while($row = $res->fetch_assoc()) {
    $xp = $row['0'];

    // Find the appropriate level
    for ($lvl = 1; $lvl < $max; $lvl++) //this for loop runs 99 times
    {
        if ($xp < $this->experience($lvl))//if players xp in skill is less than experience(level 1-99)
        {
            // Level found
            $lvl -= 1;
            break;
        }
    }
}
        return $lvl;
}

public function experience($lvl)
{
    $xp = 0;
    for($x = 1; $x < $lvl; $x++)
    {
        $xp += floor($x + 300 * pow(2, ($x / 7)));
    }
    return floor($xp / 4);
}
}

データベース情報をページに書き込むメソッド。

if($res->num_rows > 0) {
  echo "<table>
     <tr>
        <td>Rank</td>
        <td>Username</td>
        <td>Skill Level</td>
        <td>Total Exp</td>         </tr>";

while($row = $res->fetch_assoc()) {
  echo 'ran';
    $calc = new calculatelevel(); 
    $level = $calc->level(0);

     echo '<tr>
        <td>'.($count+1).'</td>
        <td>'. htmlspecialchars($row['username']) .'</td>
        <td>'.number_format($level).'</td>
        <td>'.number_format($row['0']).'</td>
        </tr>';
     $count++;
}
}
4

1 に答える 1