点击HTML表单提交按钮无法调用函数更新SQL数据表问题求助
问题排查与修复方案
1. 函数未被调用的核心原因
- 你的表单没有配置提交后的处理逻辑:表单未设置
action属性默认会提交到当前Settings.php页面,但你没有在页面中编写「接收POST请求后调用settingsUpdate()函数」的逻辑,所以函数永远不会触发。 - 表单字段名与后端取值不匹配:姓名输入框的
name属性为username,但函数中写的是$_POST['name'],就算函数被调用也取不到姓名参数。
2. 函数内部存在的其他错误
- 用户ID取值错误:
$id = (isset($_SESSION['user']['id']))这行代码中isset()返回的是布尔值(存在返回true、不存在返回false),不是实际的用户ID数值,写入SQL会完全报错。 - SQL语法完全错误:MySQL的UPDATE语法为
UPDATE 表名 SET 字段1=值1, 字段2=值2 WHERE 条件,你混用了INSERT语句的VALUES写法,同时用单引号包裹字段名、判断等于用了==(MySQL仅需单等号=),这段SQL根本无法执行。 - 错误判断完全失效:
$error被直接写死为0,无论前面参数是否存在问题都会走成功分支,无法抛出异常。 - 存在SQL注入风险:直接拼接用户输入的参数到SQL语句中,恶意用户可以提交特殊字符篡改数据库。
3. 具体修复步骤
步骤1:添加函数触发逻辑
在Settings.php最顶部添加如下代码:
<?php session_start(); // 必须开启session才能读取用户登录信息 include 'Functions.php'; // 引入函数文件 // 判断是表单提交请求时调用更新函数 if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['settings_submit'])) { settingsUpdate(); } ?>
同时给表单的提交按钮添加name属性,避免其他表单提交误触发:
<button type="submit" name="settings_submit" class="btn btn-primary" id="settingsUpdate">Save Changes</button>
步骤2:修正Functions.php中的代码
修改后的完整函数如下:
// 更新用户信息 function settingsUpdate() { global $db; $error = 0; // 校验参数是否存在 if (!isset($_POST['username'], $_POST['number'], $_SESSION['user']['id'])) { $error = 1; } $usernameU = e($_POST['username']); $numberU = e($_POST['number']); $id = $_SESSION['user']['id']; // 直接取用户ID,不要用isset包 if($error == 0){ // 使用预处理语句避免SQL注入 $stmt = mysqli_prepare($db, "UPDATE users SET username = ?, number = ? WHERE id = ?"); mysqli_stmt_bind_param($stmt, "ssi", $usernameU, $numberU, $id); $execRes = mysqli_stmt_execute($stmt); if ($execRes) { echo '<div class="alert alert-primary" role="alert">User Settings Updated Successfully.</div>'; } else { $error = 1; } } if ($error == 1) { ?> <div class="alert alert-danger" role="alert"> <p class="text-center"><strong>Oh snap!</strong> Something went wrong, contact us if you think that's wrong.</p> </div> <?php } }
内容的提问来源于stack exchange,提问作者Jared Alexander
相关产品推荐
相关产品推荐

