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>
三、关键改进点说明
- 积分累加逻辑:替换原来的
INSERT为"查询-更新/插入"的逻辑,保证同一个用户的积分会累加,而不是新增多条记录。 - 变量名修正:把
blance改成正确的拼写balance(表单和PHP变量统一),避免后续维护混淆。 - 用户体验优化:给表单添加
required属性,确保用户名和积分不能为空;用颜色区分成功/错误提示;展示余额时突出显示总积分。 - 安全提示:虽然用了
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
相关产品推荐
相关产品推荐

