You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP实现用户积分累加及总余额展示的技术求助

解决积分累加与余额展示的问题

我的网站上有类似这样的内容,我想要计算Sofia的总积分并展示她的总余额(应为163),但不知道如何实现积分累加及在网站上展示余额的功能。抱歉,这可能是个简单问题,我是PHP新手。

你当前的代码每次提交都会插入一条新的用户记录,这就是没法得到用户总积分的核心问题。咱们来修改代码实现积分累加+余额展示的功能:

一、先看你当前的代码(方便对比)

<form method="POST"> 
user name : <input type="text" name="username"><br> 
Points to Add: <input type="number" name="blance" max="100" min="1"> <br> 
<input type="submit" name="submit"> 
</form> 
<?php if (isset($_POST['submit'])) { 
$servername = "localhost"; 
$user = "root"; 
$password = ""; 
$database = "enter code here"; 
$con = mysqli_connect("$servername", "$user" , "$password" , "$database"); 
if ($con->connect_error) { 
die ("connection failed" . $con->connect_error); 
} else { 
$username = mysqli_real_escape_string($con, $_POST['username']); 
$blance = mysqli_real_escape_string($con, $_POST['blance']); 
$sql = "INSERT INTO user (username, blance) VALUES ('$username', '$blance')"; 
if ($con->query($sql) === TRUE) { 
echo "success"; 
} else { 
echo "error" . $sql . "<br>" . $con->error; 
} 
$sql6 = "SELECT * FROM user"; 
$result = mysqli_query($con, $sql6); 
$resultcheck = mysqli_num_rows($result); 
if ($resultcheck > 0) { 
while ($row = mysqli_fetch_assoc($result)) { 
echo $row['username'] . "<br>"; 
} 
} 
echo "<br>" . "<br>" . "<br>"; 
}} ?> 
</body>

二、修改后的完整代码

核心逻辑改成:先检查用户是否存在,存在则累加积分,不存在则新增用户,同时展示每个用户的总余额:

<form method="POST"> 
用户名: <input type="text" name="username" required><br> 
添加积分: <input type="number" name="balance" max="100" min="1" required> <br> <!-- 修正了变量名拼写 -->
<input type="submit" name="submit" value="添加积分"> 
</form> 

<?php
if (isset($_POST['submit'])) {
    $servername = "localhost";
    $user = "root";
    $password = "";
    $database = "你的数据库名"; // 替换成你实际的数据库名称
    $con = mysqli_connect($servername, $user, $password, $database);

    // 检查数据库连接
    if ($con->connect_error) {
        die("数据库连接失败: " . $con->connect_error);
    }

    // 处理表单数据,防止SQL注入
    $username = mysqli_real_escape_string($con, trim($_POST['username']));
    $addBalance = mysqli_real_escape_string($con, $_POST['balance']);

    // 第一步:检查用户是否已存在
    $checkQuery = "SELECT blance FROM user WHERE username = '$username'";
    $checkResult = mysqli_query($con, $checkQuery);

    if (mysqli_num_rows($checkResult) > 0) {
        // 用户存在,累加积分:现有积分 + 新增积分
        $userRow = mysqli_fetch_assoc($checkResult);
        $newTotal = $userRow['blance'] + $addBalance;
        $updateQuery = "UPDATE user SET blance = $newTotal WHERE username = '$username'";
        
        if ($con->query($updateQuery)) {
            echo "<p style='color:green;'>积分添加成功!</p>";
        } else {
            echo "<p style='color:red;'>更新失败: " . $con->error . "</p>";
        }
    } else {
        // 用户不存在,创建新用户并添加初始积分
        $insertQuery = "INSERT INTO user (username, blance) VALUES ('$username', '$addBalance')";
        
        if ($con->query($insertQuery)) {
            echo "<p style='color:green;'>新用户创建成功,已添加初始积分!</p>";
        } else {
            echo "<p style='color:red;'>创建失败: " . $con->error . "</p>";
        }
    }

    // 第二步:展示所有用户的总余额
    echo "<h3>用户总余额列表</h3>";
    $showQuery = "SELECT username, blance FROM user ORDER BY username";
    $showResult = mysqli_query($con, $showQuery);

    if (mysqli_num_rows($showResult) > 0) {
        while ($row = mysqli_fetch_assoc($showResult)) {
            echo "<p>" . $row['username'] . " 的总积分:<strong>" . $row['blance'] . "</strong></p>";
        }
    } else {
        echo "<p>暂无用户积分记录</p>";
    }

    // 关闭数据库连接
    mysqli_close($con);
}
?>
</body>

三、关键改进点说明

  1. 积分累加逻辑:替换原来的INSERT为"查询-更新/插入"的逻辑,保证同一个用户的积分会累加,而不是新增多条记录。
  2. 变量名修正:把blance改成正确的拼写balance(表单和PHP变量统一),避免后续维护混淆。
  3. 用户体验优化:给表单添加required属性,确保用户名和积分不能为空;用颜色区分成功/错误提示;展示余额时突出显示总积分。
  4. 安全提示:虽然用了mysqli_real_escape_string,但更推荐使用预处理语句来彻底防止SQL注入,比如:
    // 示例:用预处理语句更新积分
    $updateStmt = $con->prepare("UPDATE user SET blance = blance + ? WHERE username = ?");
    $updateStmt->bind_param("is", $addBalance, $username);
    $updateStmt->execute();
    

现在你输入Sofia,先添加50积分,再添加113积分,就能看到她的总积分变成163啦!

内容的提问来源于stack exchange,提问作者Izaya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:30:47