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

编辑员工记录时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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 17:15:39