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

PHP中如何从foreach循环获取指定POST值而非最后索引

解决点击「Update Payment」按钮无法获取对应索引的问题

问题现状

通过foreach循环生成8张卡片,每张卡片包含隐藏输入框key_val和「Update Payment」按钮,但点击任意按钮后,输出的始终是最后一个索引(8),无法获取当前点击卡片对应的$key。

问题原因

所有卡片的隐藏输入框和按钮都共享同一个表单上下文(如果页面没有显式包裹表单,默认整个页面为一个表单),提交时浏览器会读取同名输入框的最后一个值,因此无论点击哪个按钮,$_POST['key_val']都会拿到最后一张卡片的$key。

解决方案

方法1:为每个卡片单独包裹表单

将每张卡片的内容放在独立的<form>标签内,确保每个按钮提交的是自身所在表单的隐藏输入值:

<?php
foreach ($cards as $key=> $row):
    $items[] = $row;
    echo "<br>";
    ?>
    <div class="card">
      <div class="card-body">
        <form method="post">
          <h5 class="card-title"><?echo $row['Holder_Name'];?></h5>
          <input type="hidden" name="key_val" value="<?= $key ?>">
          <p class="card-text">Visa ending in <?echo $row['Card_ends']?></p>
          <?
          if ($row['is_active']!=1){
          echo'<button name="update_card" class="btn btn-warning ">Update Payment</button>';
          ?> 
        </form>
      </div>
    </div>
<?
endforeach;

if(isset($_POST['update_card']) && isset($_POST['key_val'])) {
    $keyBuy = $_POST['key_val'];
    echo $keyBuy;
}
?>

方法2:通过按钮的value属性直接传递索引

移除隐藏输入框,将$key赋值给按钮的value属性,提交时直接从$_POST['update_card']获取对应索引:

<?php
foreach ($cards as $key=> $row):
    $items[] = $row;
    echo "<br>";
    ?>
    <div class="card">
      <div class="card-body">
        <h5 class="card-title"><?echo $row['Holder_Name'];?></h5>
        <p class="card-text">Visa ending in <?echo $row['Card_ends']?></p>
        <?
        if ($row['is_active']!=1){
        echo'<button name="update_card" class="btn btn-warning " value="'.$key.'">Update Payment</button>';
        ?> 
      </div>
    </div>
<?
endforeach;

if(isset($_POST['update_card'])) {
    $keyBuy = $_POST['update_card'];
    echo $keyBuy;
}
?>

注意事项

  • 确保表单的method属性设置为post,与后端接收逻辑匹配
  • 方法1逻辑清晰,每个卡片的提交数据独立;方法2更简洁,减少冗余DOM元素

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 12:45:38