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

HTML表单未修改默认值时无法向MySQL提交UPDATE请求

问题分析与解决方案

你的问题核心是MySQL的affected_rows机制——它仅统计实际发生值变更的行数。当提交的数值与数据库现有值完全一致时,即便UPDATE语句执行成功,affected_rows也会返回0,导致代码误判为更新失败。

方案1:修改判断逻辑,不依赖affected_rows

如果你的需求是只要表单提交成功(无论值是否变化)就触发短信发送和页面跳转,直接判断UPDATE语句的执行结果即可,无需关注是否有行被修改:

// 捕获执行结果
$executeResult = $stmt->execute();

if ($executeResult) {
    sendsms($first, $last, $who);
    header('Refresh: 3; URL=https://example.com/success.php');
} else {
    echo '数据库更新执行失败,请稍后重试';
    header('Refresh: 3; URL=https://example.com/return.php');
}

方案2:强制MySQL返回匹配行数

若一定要保留affected_rows的判断逻辑,可以在连接数据库时添加MYSQLI_CLIENT_FOUND_ROWS参数,让affected_rows返回WHERE条件匹配到的行数(而非实际修改的行数):

// 示例:修改数据库连接代码
$connmember = mysqli_init();
mysqli_real_connect($connmember, $host, $user, $pass, $db, null, null, MYSQLI_CLIENT_FOUND_ROWS);

这样只要WHERE条件匹配到对应id_member的记录,哪怕值未修改,affected_rows也会返回5(对应5条variable字段记录),就能正常进入成功分支。

额外优化:调整数字字段的处理逻辑

你的test_input函数使用htmlspecialchars处理金额字段,虽然不会直接引发问题,但针对数值类型的字段,更建议直接用类型转换替代,避免不必要的转义:

$novpil = (float)trim($_POST['november']);
$decpil = (float)trim($_POST['december']);
// 其余金额字段同理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 10:17:22