PHP 7.2.0环境下$_POST失效求助:表单POST数据无响应
问题排查与解决方案
先从最明显的问题入手,一步步解决你的表单提交失效问题:
1. SQL语句语法错误(核心失效原因)
你的edit函数里的SQL语句存在语法错误:
$query = "UPDATE person SET firstName = '{$firstName}', WHERE idPerson = {$id}";
注意firstName = '{$firstName}'后面多了一个逗号,这会直接导致MySQL执行语句失败。但你只是在失败时return 1,没有输出任何错误信息,所以看不到问题所在。
修复后的SQL语句:
$query = "UPDATE person SET firstName = '{$firstName}' WHERE idPerson = {$id}";
2. 开启PHP错误显示,捕获详细报错
你说没有任何错误提示,大概率是PHP的错误显示未开启。在你的PHP入口文件顶部添加以下代码,强制开启错误显示:
error_reporting(E_ALL); ini_set('display_errors', 1);
同时,在mysqli_query失败时输出具体的MySQL错误信息,方便排查:
if(!mysqli_query($connection, $query)){ // 输出数据库错误详情 die(mysqli_error($connection)); return 1; }
3. 确保表单提交后能触发edit函数
你的表单action是<?php echo $proc; ?>?function=edit,但你没说明$proc对应的PHP文件如何处理function=edit这个参数。必须在该文件中添加逻辑,检测并调用edit函数,比如:
// 假设$proc指向当前文件 if(isset($_GET['function']) && $_GET['function'] === 'edit'){ // 确保edit函数已被定义或引入 $result = edit(); // 输出执行结果,方便确认状态 echo $result === 0 ? "更新成功" : "更新失败"; }
如果没有这段逻辑,表单提交后只是到达了PHP文件,但根本没调用edit函数,自然不会有任何效果。
4. 其他细节检查
- 表单中的
id隐藏输入框,要确保它有正确的value值(比如从数据库获取的用户ID),否则$_POST['id']为空,SQL更新条件无效。 - 你使用了
multipart/form-data的enctype,但表单没有文件上传字段,虽然不影响功能,但可以去掉该属性,简化表单提交。 - 安全提醒:直接将用户输入的
$_POST参数拼入SQL会导致严重的SQL注入问题,建议改用预处理语句,示例如下:
function edit() { $connection = Database::getConnection(); $id = $_POST["id"]; $firstName = $_POST["firstName"]; // 预处理语句防止SQL注入 $stmt = $connection->prepare("UPDATE person SET firstName = ? WHERE idPerson = ?"); $stmt->bind_param("si", $firstName, $id); // "s"表示字符串类型,"i"表示整数类型 if(!$stmt->execute()){ die($stmt->error); return 1; } $stmt->close(); return 0; }
按照上述步骤排查修复后,你的表单提交应该就能正常生效了。
内容的提问来源于stack exchange,提问作者eri
相关产品推荐
相关产品推荐

