PHP体验系统//简单

PHP体验系统//简单,php,Php,作为一名php编程语言的乞丐,我正在玩代码,在localhost上工作,我做了一些小项目。现在我正在尝试做一个尽可能简单的体验系统,我被困在这一部分,我不知道我做错了什么。一些建议 我做错了什么 密码 function update_user_xp($user_id, $xp_ammount){ global $db; $params = array('user_id' => $user_id); $users = $db->rawQuery("

作为一名php编程语言的乞丐,我正在玩代码,在localhost上工作,我做了一些小项目。现在我正在尝试做一个尽可能简单的体验系统,我被困在这一部分,我不知道我做错了什么。一些建议

我做错了什么

密码

function update_user_xp($user_id, $xp_ammount){

    global $db;

    $params = array('user_id' => $user_id);

    $users = $db->rawQuery("SELECT * FROM users_xp WHERE user_id = ?", $params);

    $data = array(
        'user_xp_amount' => $xp_ammount + $users[0]['user_xp_amount'],
        'user_id' => $user_id
    );

    $db->where ('user_id', $data['user_id']);

        if ($db->update ('users_xp', $data)){

            $xpReceived = 'You have received '.$xp_ammount.' points of experience! Have a total of '.$data['user_xp_amount'].' points of experience.';

        } else {

            $xpReceived = $db->getLastError();
        }

    return $xpReceived;
}


//update_user_xp(4, 10); // user_id: 4, update with 10 points

function get_user_xp ($user_id){
    global $db;

    $params = array('user_id' => $user_id);

    $user = $db->rawQueryOne ('SELECT * FROM users_xp WHERE user_id=?', $params);

    $xp = $user['user_xp_amount'];

    return $xp;

}

function xp_need () {

    global $db;

    $xpBarNeed = $db->rawQuery("SELECT `level`, `expneeded` FROM `experience_level`");

    foreach ($xpBarNeed as $key => $value) {

        $output[] = $value;

    }


    return $output;

}


$xpn = xp_need();

$userXP = get_user_xp(4);

for($i = 0; $i < count($xpn); $i++){

            if($xpn[$i]['expneeded'] == $userXP)
            {

                //This part is working well
                print 'You are level <b>' . $xpn[$i]['level'].'</b>';


            } else {

                if ($userXP > $xpn[$i]['expneeded'] && $userXP >= $xpn[$i]['expneeded'])
            {


                        //This is the part that doesn t work, 
                        $diffEXP =  $xpn[$i]['expneeded'] -= $userXP;

                        print 'You need more exp  '. $diffEXP.'</br>';

            }
        }

}
函数更新\u user\u xp($user\u id,$xp\u amount){
全球$db;
$params=array('user\u id'=>$user\u id);
$users=$db->rawQuery(“从users\U xp中选择*其中user\U id=?”,$params);
$data=数组(
'user\u xp\u amount'=>$xp\u amount+$users[0]['user\u xp\u amount'],
'user\u id'=>$user\u id
);
$db->where('user\u id',$data['user\u id']);
如果($db->update($users\u xp',$data)){
$xpReceived='您已收到'$xp\u amount'。经验点!总共有'$data['user\u xp\u amount'].'经验点';
}否则{
$xpReceived=$db->getLastError();
}
返回$xpReceived;
}
//更新用户xp(4,10);//用户id:4,更新为10分
函数get\u user\u xp($user\u id){
全球$db;
$params=array('user\u id'=>$user\u id);
$user=$db->rawQueryOne('SELECT*FROM users\u xp WHERE user\u id=?',$params);
$xp=$user['user\u xp\u amount'];
返回$xp;
}
函数xp\u需要(){
全球$db;
$xpBarNeed=$db->rawQuery(“从‘经验’级别中选择‘级别’,‘exprequired’”);
foreach($xpBarNeed作为$key=>$value){
$output[]=$value;
}
返回$output;
}
$xpn=xp_need();
$userXP=get_user_xp(4);
对于($i=0;$i$xpn[$i]['expneeded']&&$userXP>=$xpn[$i]['expneeded'])
{
//这是不起作用的部分,
$xp=$xpn[$i]['expneeded']-=$userXP;
打印“您需要更多经验”。$xp.
”; } } }
这就是我在页面中看到的情况。

请注意,在撰写本文时,我的解决方案不是最好的,或者说是一个优化良好的解决方案。我将在不久的将来尝试优化它。目前,您可以使用以下方法:

<?php
    
$xpn = xp_need();
$userXP = get_user_xp(4);
    
$level = 0;
$nextExp = 0;

for ($i = count($xpn) - 1;$i >= 0;$i--)
{
    if ($userXP >= $xpn[$i]['expneeded'])
    {
        $level = $xpn[$i]['level'];
        $nextExp = $xpn[$i + 1]['expneeded'];
        break;
    }
}

$expNeeded = $nextExp - $userXP;
$percentage = round(($userXP/$nextExp) * 100);

echo "Current level: " . $level;
echo "<br/>Exp needed for the next level (" . ($level + 1) . "): " . $expNeeded;
echo "<br/>Exp achieved percentage for the next level: " . $percentage;

?>


需要更多关于您的问题的详细信息吗?不会计算到下一个级别所需exp的差异。我是否可以查看
$xpn
的输出在您学习时,停止使用
global
访问您的数据库对象,而是将其作为参数传入。将其定义为全局意味着所有外部代码都必须使用
$db
作为数据库对象,如果使用其他名称,函数将停止工作。当然,这是输出。|谢谢,效果非常好。现在我需要阅读您的代码以了解我的错误。“声誉低于15的人所投的票将被记录,但不会改变公开显示的帖子分数。“我需要更多的名声,但非常感谢你,OMi!祝你玩得愉快。我试着做一个进度条,但我失败了很多,无法计算两个数字的差值,这两个数字是xp所需的和用户经验。
code
function calculatePercentage($total,$number){$ab=$total/$number*100;return$ab;}
code
没有按应有的方式返回,即使我把数字四舍五入,有什么建议吗?我不明白?您要计算的百分比?下一级百分比所需的Exp?