PHP处理form表单提交生成update查询时$gset变量未存储问题求助
问题根因
$gset变量仅在POST提交的分支内被赋值,页面首次访问、提交后刷新触发GET请求时,该变量未被定义,所以前端无法正常输出- strictness值已经存入数据库,无论是否触发POST提交,都需要主动从
users表查询最新值赋值给$gset - 原代码直接拼接用户输入到SQL语句中,存在SQL注入风险,必须优化
修复后代码
<?php // 替换为你自己的数据库连接配置 $conn = mysqli_connect('数据库地址', '账号', '密码', '数据库名'); // 处理更新逻辑 if(isset($_POST['strictness'])){ $gset = $_POST['strictness']; // 用预处理语句避免SQL注入 $updateStmt = mysqli_prepare($conn, "UPDATE users SET strictness = ? WHERE user_id = 1"); mysqli_stmt_bind_param($updateStmt, "s", $gset); mysqli_stmt_execute($updateStmt); mysqli_stmt_close($updateStmt); echo "strictness value updated"; } // 无论是否提交,都从数据库查询最新的strictness值 $queryStmt = mysqli_prepare($conn, "SELECT strictness FROM users WHERE user_id = 1"); mysqli_stmt_execute($queryStmt); mysqli_stmt_bind_result($queryStmt, $gset); mysqli_stmt_fetch($queryStmt); mysqli_stmt_close($queryStmt); ?> <form method="POST" class="form-align" action=""> <h5 class="my-6">Current Strictness :</h5> <?php echo htmlspecialchars($gset); ?><br> <select name="strictness" required> <option value=""></option> <option value="15" <?php if($gset == 15) echo 'selected'; ?>>15</option> <option value="31" <?php if($gset == 31) echo 'selected'; ?>>31</option> </select> <input type="submit" name="substrict" value="CHANGE"> </form>
额外优化说明
- 输出到前端的变量用
htmlspecialchars()处理,避免XSS注入风险 - 下拉框新增了选中状态匹配,提交后会自动选中当前生效的strictness值,交互体验更好
内容的提问来源于stack exchange,提问作者Dr Charms
相关产品推荐
相关产品推荐

