伊夫看着已经要求,并与回答所有的问题,但我似乎无法找到适合我最好的一个答案。我试图做的是制作一个系统,当用户处于某个xp限制时,可以进入下一个层次。并且它显示了直到下一个xp需要多少xp。XP和调平系统PHP MYSQL
所以
lvl1 = 0 => lvl2 = 256 => lvl3 = 785 => lvl4 = 1656 => lvl5 = 2654
如何将我去这样做,所以如果是XP是在一定量的显示量,有多少XP需要一个新的水平。
伊夫看着已经要求,并与回答所有的问题,但我似乎无法找到适合我最好的一个答案。我试图做的是制作一个系统,当用户处于某个xp限制时,可以进入下一个层次。并且它显示了直到下一个xp需要多少xp。XP和调平系统PHP MYSQL
所以
lvl1 = 0 => lvl2 = 256 => lvl3 = 785 => lvl4 = 1656 => lvl5 = 2654
如何将我去这样做,所以如果是XP是在一定量的显示量,有多少XP需要一个新的水平。
存放在数据库表,而不是在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_id
在levels
表中相应id
匹配。您可以使用类似"SELECT levels.name FROM levels WHERE levels.id = $users_level_id"
的东西来显示他所在级别的名称。
我推荐的标准功能function xpAction(...)
你所有用户可以执行XP相关的操作的内部调用。所以,如果他增加了一个帖子,你正在运行function addPost($data)
,只是在其内部都有一条线来调用xpAction
用正确的参数。
你可以尝试这样的事情:
我们users_xp
表在我们的数据库,以user_xp_id
(主键 - 自动递增),user_id
和user_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;
xp - > experience? – AlphaMale
xp是经验是 – Dianamu
这个工作可以吗? function xpIncrease($ amount){ if($ amount> = $ details ['xp_needed']){ $ amount - = $ details ['xp_needed']; $ details ['xp_needed'] = $ newValue; //用户调平,更新xp_needed xpIcrease($ amount); //再次调用它,因为用户可能会升级两次或更多... } else { //只是将它加上SQL } } – Dianamu