PHP PostgreSQL项目编辑数据提交后未更新问题求助
数据更新无响应问题排查与修复
核心问题:GET参数名称拼写不一致
你的存储函数代码中,获取ID的参数是$_GET['id_stasiun_operator'],但视图表单的action属性里传递的参数是id_station_operator(注意拼写差异:stasiun vs station):
- 存储函数:
$id = $_GET['id_stasiun_operator']; - 视图表单action:
form.php?mode=edit&id_station_operator=<?=$id;?>
这会导致$id无法获取到正确的记录ID,最终UPDATE语句的WHERE id_station_operator = $3条件匹配不到任何数据,所以数据库没有更新,也不会触发报错(SQL语句本身合法,只是无匹配行)。
修复方案:
统一参数名称,将存储函数里的代码修改为:
$id = $_GET['id_station_operator'];
其他排查与优化点
- 验证更新语句的影响行数
在执行UPDATE后,添加代码检查实际被修改的行数,确认是否匹配预期:
$result = pg_query_params($connection, $queryUpdate, array($id_stasiun, $keterangan, $id)); if(!$result){ die("Error in SQL query: " . pg_last_error()); } // 检查影响行数,若为0则说明WHERE条件无匹配 $affectedRows = pg_affected_rows($result); echo "更新影响行数: $affectedRows";
- 修复表单select的重复选项问题
视图中select控件先输出当前选中的option,再循环输出所有station,会导致同一station出现两次选项。修改循环逻辑,动态设置selected属性避免重复:
$option_stasiun = ""; while($row_stasiun = pg_fetch_assoc($result_station)){ $selected = ($row_stasiun['id_stasiun'] == $row['id_stasiun']) ? "selected" : ""; $option_stasiun .= "<option value='{$row_stasiun['id_stasiun']}' $selected>{$row_stasiun['nama_stasiun']}</option>"; }
同时移除原来单独输出的重复option:
<select name="id_stasiun" id="id_stasiun"> <?php echo $option_stasiun?> </select>
确保表单提交逻辑正常触发
确认$var_a_st == "Submit"的判断是否生效,可查看调试输出的$var_a_st值。若表单的onSubmit="return check()"中check()函数返回false,会阻止表单提交,可临时注释该属性测试。改用PHP header跳转
建议用header()函数替代meta刷新跳转,跳转前确保无任何输出:
// 清空输出缓冲 ob_start(); // ... 执行更新逻辑 ... ob_end_clean(); header("Location: list.php"); exit;
内容的提问来源于stack exchange,提问作者Nicho
相关产品推荐
相关产品推荐

