2012-11-07 30 views
3

伊夫看着已经要求,并与回答所有的问题,但我似乎无法找到适合我最好的一个答案。我试图做的是制作一个系统,当用户处于某个xp限制时,可以进入下一个层次。并且它显示了直到下一个xp需要多少xp。XP和调平系统PHP MYSQL

所以

lvl1 = 0 => lvl2 = 256 => lvl3 = 785 => lvl4 = 1656 => lvl5 = 2654 

如何将我去这样做,所以如果是XP是在一定量的显示量,有多少XP需要一个新的水平。

+0

xp - > experience? – AlphaMale

+0

xp是经验是 – Dianamu

+0

这个工作可以吗? function xpIncrease($ amount){ if($ amount> = $ details ['xp_needed']){ $ amount - = $ details ['xp_needed']; $ details ['xp_needed'] = $ newValue; //用户调平,更新xp_needed xpIcrease($ amount); //再次调用它,因为用户可能会升级两次或更多... } else { //只是将它加上SQL } } – Dianamu

回答

1

存放在数据库表,而不是在flexebility应用级逻辑您的观点。这里有一个建议方案:

表层次:INT A_I P_K id, INT points, VARCHAR name

表用户:INT A_I P_K id, VARCHAR user, VARCHAR password, INT points, INT level_id(基本字段)

现在为赚取XP每个用户的动作,更新用户的点。从levels表中的所有这些行获取并检查它们与用户的更新点来生产您需要:)在SQL查询的结果,记得ORDER by points DESC,这样就可以很容易地检查水平UPS在循环中!如果有水平的更新,只需更新用户的level_idlevels表中相应id匹配。您可以使用类似"SELECT levels.name FROM levels WHERE levels.id = $users_level_id"的东西来显示他所在级别的名称。

我推荐的标准功能function xpAction(...)你所有用户可以执行XP相关的操作的内部调用。所以,如果他增加了一个帖子,你正在运行function addPost($data),只是在其内部都有一条线来调用xpAction用正确的参数。

5

你可以尝试这样的事情:

我们users_xp表在我们的数据库,以user_xp_id(主键 - 自动递增),user_iduser_xp_amount(默认值:0)的字段。当我们要更新我们应该做的用户XP量也喜欢:

$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db'); 

function update_user_xp($user_id, $amount, $mysqli) { 
    $mysqli->query("UPDATE users_xp 
        SET user_xp_amount=user_xp_amount+" . $amount . " 
        WHERE user_id='$user_id'"); 
} 

// we call this function like: 
update_user_xp(4, 10, $mysqli); // user_id: 4, update with 10 points 

,当我们想要得到的实际用户XP量我们可以从数据库表

function get_user_xp($user_id, $mysqli) { 
    $sql = $mysqli->query("SELECT user_xp_amount 
          FROM users_xp 
          WHERE user_id='$user_id'"); 
    $row = $sql->fetch_assoc(); 
    return $row['user_xp_amount']; 

} 

$xp = array('lvl1' => 0, 'lvl2' => 256, 'lvl3' => 785, 'lvl4' => 1656, 'lvl5' => 2654); 

$my_xp = get_user_xp(4, $mysqli); // where 4 is my user id 

for($i = 0; $i < count($xp); $i++) { 
    if($my_xp == $xp[$i]) { 
     echo 'I\'m on level ', ($i+1); 
     break; 
    } 
    else { 
     if(isset($xp[$i+1])) { 
      if($my_xp > $xp[$i] && $my_xp <= $xp[$i + 1]) { 
       echo 'My next level is ', ($i+2), ' and I need ', $xp[$i+1], ' more points for achieving it!'; 
       break; 
      } else { 
       echo 'My next level is ', ($i+1), ' and I need ', $xp[$i], ' more points for achieving it!'; 
       break; 
      } 
     } 
    } 
} 

以后编辑得到它:

CREATE TABLE `my_db_name`.`users_xp` (
`user_xp_id` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY , 
`user_id` BIGINT NOT NULL , 
`user_xp_amount` BIGINT NOT NULL DEFAULT '0' 
) ENGINE = InnoDB; 
+0

$ my_xp = 325;这就是设置xp,id喜欢使它工作,所以当你发布一些东西时,它会向xp添加5xp。我们如何做到这一点? - – Dianamu

+0

我编辑了我的答案..希望你能理解它 –

+0

你能不能给我一个db表sql表格sql脚本 – Dianamu