编辑员工记录时PHP无法识别数据库ID的技术问题
问题诊断与修复方案
核心错误原因
你的AJAX请求没有携带idEditFunc的值,导致PHP代码中$_POST['idEditFunc']无法获取到对应数据,UPDATE语句的WHERE条件失效,自然无法定位到要更新的记录。
具体修复步骤
1. 修正AJAX请求的data参数
在AJAX的data对象中添加idEditFunc的取值,确保id被传递到后端:
$('#formEditarFuncionario').submit(function(e){ e.preventDefault(); var u_nome = $('#nomeEditFunc').val(); var u_email = $('#emailEditFunc').val(); var u_cc = $('#ccEditFunc').val(); var u_cargo = $('#cargoEditFunc').val(); var u_coordenador = $('#coordenadorEditFunc').val(); var u_nivel = $('#nivelEditFunc').val(); var u_id = $('#idEditFunc').val(); // 新增:获取id值 $.ajax({ url: 'http://localhost/adm/modais/EDITAR_FUNCIONARIO/editarFuncionarios.php', method: 'POST', // 新增idEditFunc参数 data: { nomeEditFunc: u_nome, emailEditFunc: u_email, ccEditFunc: u_cc, cargoEditFunc: u_cargo, coordenadorEditFunc: u_coordenador, nivelEditFunc: u_nivel, idEditFunc: u_id // 新增这一行 }, dataType: 'json' }).done(function(result){ console.log(result); $('#nomeEditFunc').val(''); $('#emailEditFunc').val(''); $('#ccEditFunc').val(''); $('#cargoEditFunc').val(''); $('#coordenadorEditFunc').val(''); $('#nivelEditFunc').val(''); $('#idEditFunc').val(''); // 清空id输入框 getComment2 (); }); });
2. 修正HTML中的id输入框
你的HTML里idEditFunc输入框重复定义了name属性(先写了空的name="",又写了name="idEditFunc"),虽然浏览器可能兼容,但建议修正为隐藏输入框(id不需要用户手动编辑,避免误修改):
<input type="hidden" name="idEditFunc" id="idEditFunc">
3. 可选优化:PHP代码增加参数校验
为避免未定义索引错误,在PHP中先检查必要参数是否存在,并返回明确的执行结果:
header('Content-Type: application/json'); // 先检查所有必要参数是否存在 if(!isset($_POST['nomeEditFunc'], $_POST['emailEditFunc'], $_POST['ccEditFunc'], $_POST['cargoEditFunc'], $_POST['coordenadorEditFunc'], $_POST['nivelEditFunc'], $_POST['idEditFunc'])){ echo json_encode(['status' => 'error', 'msg' => '缺少必要参数']); exit; } $nomeEditFunc = $_POST['nomeEditFunc']; $emailEditFunc = $_POST['emailEditFunc']; $ccEditFunc = $_POST['ccEditFunc']; $cargoEditFunc = $_POST['cargoEditFunc']; $coordenadorEditFunc = $_POST['coordenadorEditFunc']; $nivelEditFunc = $_POST['nivelEditFunc']; $idEditFunc = $_POST['idEditFunc']; $pdo = new PDO('mysql:host=localhost; dbname=banco;', 'root', ''); $stmt = $pdo->prepare('UPDATE funcionarios SET nome = :no, email = :em, cc = :cc, cargo = :ca, coordenador = :co, nivel = :ni WHERE id = :id'); $stmt->bindValue(':no', $nomeEditFunc); $stmt->bindValue(':em', $emailEditFunc); $stmt->bindValue(':cc', $ccEditFunc); $stmt->bindValue(':ca', $cargoEditFunc); $stmt->bindValue(':co', $coordenadorEditFunc); $stmt->bindValue(':ni', $nivelEditFunc); $stmt->bindValue(':id', $idEditFunc); // 执行后返回结果 if($stmt->execute()){ echo json_encode(['status' => 'success', 'msg' => '数据更新成功']); }else{ echo json_encode(['status' => 'error', 'msg' => '数据更新失败']); }
4. 更简洁的写法:直接序列化表单
如果不想手动逐个取值,可以用jQuery的serialize()方法直接序列化整个表单,自动包含所有带name属性的表单元素,避免遗漏参数:
$('#formEditarFuncionario').submit(function(e){ e.preventDefault(); $.ajax({ url: 'http://localhost/adm/modais/EDITAR_FUNCIONARIO/editarFuncionarios.php', method: 'POST', data: $(this).serialize(), // 直接序列化表单 dataType: 'json' }).done(function(result){ console.log(result); $('#formEditarFuncionario')[0].reset(); // 重置整个表单 getComment2 (); }); });
内容的提问来源于stack exchange,提问作者Benize
相关产品推荐
相关产品推荐

