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

如何通过多ID按钮动态调用ISSET?表单提交始终插入最后值

问题原因

你遇到的问题是因为循环中重复生成了name="model"的隐藏输入框,按照HTML规则,同名表单元素提交时只会保留最后一个的值,所以无论点击哪个按钮,后端拿到的$_POST['model']都是循环最后一行的model值。

解决方法

方法一:将model值绑定到提交按钮的value(最简单)

修改表单代码

移除循环里的隐藏输入框,直接把model值作为提交按钮的value:

<form method="post" action="" enctype="multipart/form-data">
  <input type="text" class="form-control" placeholder="Numéro de chassit" name="chassit" id="chassit" >
  <?php if (mysqli_num_rows($result) > 0) { ?>
    <?php while($row = mysqli_fetch_array($result)) { ?>
      <?= "<img alt='' src='../admin/image/mercedes/".$row['image']."' >";?>
      <div class="card-body">
         <!-- 移除隐藏的model输入框,直接用按钮的value传递model值 -->
         <input type="submit" name="mo" class="btn btn-secondary" value="<?= $row['model'] ?>">
      </div>
    <?php } ?>
  <?php } ?>
</form>

修改后端处理逻辑

直接用$_POST['mo']获取对应的model值:

<?php
if(ISSET($_POST['mo'])){
  $demandeur = $_SESSION['username'];
  $model = $_POST['mo']; // 直接取提交按钮的value
  $chassit = $_POST['chassit'];

  // 改用预处理语句防止SQL注入
  $sql = "INSERT INTO tbl_xp_support (demandeur,model,chassit) VALUES (?,?,?)";
  $stmt = mysqli_prepare($con, $sql);
  mysqli_stmt_bind_param($stmt, "sss", $demandeur, $model, $chassit);
  
  if (mysqli_stmt_execute($stmt)) {
    header("Location: ../xp_group.php");
    exit; // 跳转后必须终止后续代码执行
  } else {
    echo "Error: " . mysqli_error($con);
  }
  mysqli_close($con);
}
?>

方法二:给每个提交按钮设置唯一的name

修改表单代码

给每个提交按钮的name加上model前缀,生成唯一标识:

<form method="post" action="" enctype="multipart/form-data">
  <input type="text" class="form-control" placeholder="Numéro de chassit" name="chassit" id="chassit" >
  <?php if (mysqli_num_rows($result) > 0) { ?>
    <?php while($row = mysqli_fetch_array($result)) { ?>
      <?= "<img alt='' src='../admin/image/mercedes/".$row['image']."' >";?>
      <div class="card-body">
         <input type="submit" name="mo_<?= $row['model'] ?>" class="btn btn-secondary" value="<?= $row['model'] ?>">
      </div>
    <?php } ?>
  <?php } ?>
</form>

修改后端处理逻辑

遍历$_POST找到被点击的按钮,提取对应的model值:

<?php
$model = '';
// 遍历POST数据,定位以mo_开头的按钮标识
foreach($_POST as $key => $value){
    if(strpos($key, 'mo_') === 0){
        $model = substr($key, 3); // 截取mo_后缀的model值
        break;
    }
}

if(!empty($model)){
  $demandeur = $_SESSION['username'];
  $chassit = $_POST['chassit'];

  // 使用预处理语句防止SQL注入
  $sql = "INSERT INTO tbl_xp_support (demandeur,model,chassit) VALUES (?,?,?)";
  $stmt = mysqli_prepare($con, $sql);
  mysqli_stmt_bind_param($stmt, "sss", $demandeur, $model, $chassit);
  
  if (mysqli_stmt_execute($stmt)) {
    header("Location: ../xp_group.php");
    exit;
  } else {
    echo "Error: " . mysqli_error($con);
  }
  mysqli_close($con);
}
?>
重要安全提示

你原代码直接将用户输入拼接到SQL语句中,存在严重的SQL注入风险,上面的解决方法已改用mysqli预处理语句规避该问题,务必使用这种方式处理数据库操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 13:54:37