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

动态添加行数据无法通过PHP获取,如何存入数组?

问题分析与解决方案

首先明确:是的,你需要使用多维数组——每一行的8列数据是一组关联信息,最终要把所有行的数据存成一个包含多个子数组的集合,每个子数组对应一行的完整内容。

你的代码现在出现数组值为null的问题,主要有几个关键原因,我一步步帮你修正:

1. 核心问题排查

  • 缺失行数记录字段:你在PHP里用$index0 = $this->input->post("showindex0");获取总行数,但HTML里没有这个隐藏字段,导致$index0为null,循环根本无法执行。
  • 复选框未勾选时无数据:HTML复选框未勾选时,表单不会向服务器发送该字段,直接取$basic_i[$i]会出现索引缺失,返回null。
  • 未累加行数据:当前PHP循环每次都覆盖$basic_data,没有把每行数据添加到总数组中,最终只会保留最后一行(甚至循环没执行时为空)。

修正后的完整代码

第一步:修改HTML/JS,补充行数记录与删除逻辑

首先在表格外添加隐藏字段存储当前行数:

<input type="hidden" name="showindex0" id="showindex0" value="1">

然后更新JS的addTable0函数,每次添加/删除行后同步更新隐藏字段的值,并修复删除按钮的逻辑:

var index0 = 1;
function addTable0() {
    var table0 = document.getElementById("myTable0");
    var row0 = table0.insertRow(2);
    // 保留你原本创建单元格、插入表单元素的代码
    
    $("#cell9_0").append('<button onclick="deleteTable0(this)" type="button" class="btn btn-danger btn-sm remove"><span class="glyphicon glyphicon-trash"></span></button>');
    index0++;
    // 更新行数记录
    document.getElementById("showindex0").value = index0;
}

// 修复删除行的逻辑
function deleteTable0(btn) {
    var row = btn.parentNode.parentNode;
    row.parentNode.removeChild(row);
    index0--;
    // 删除后同步更新行数
    document.getElementById("showindex0").value = index0;
}

同时修改初始行的删除按钮,传递当前元素参数:

<button onclick="deleteTable0(this)" type="button" class="btn btn-danger btn-sm">
    <span class="glyphicon glyphicon-trash"></span>
</button>

第二步:修正PHP代码,处理复选框与多维数组

现在修改PHP代码,创建总数组存储所有行数据,同时处理复选框未勾选的情况:

// 获取总行数
$index0 = $this->input->post("showindex0");
// 初始化存储所有行数据的多维数组
$basic_data_list = [];

for ($i=0; $i < $index0; $i++) {
    // 处理复选框:未勾选时默认设为0(或false,根据需求调整)
    $basic_i = $this->input->post("basic_i[$i]") ?? 0;
    $basic_e = $this->input->post("basic_e[$i]") ?? 0;
    $basic_pi = $this->input->post("basic_pi[$i]") ?? 0;
    $basic_pa = $this->input->post("basic_pa[$i]") ?? 0;
    
    // 组装当前行的关联数组
    $row_data = array(
        'basic_category' => $this->input->post("basic_category[$i]"),
        'basic_workscope' => $this->input->post("basic_workscope[$i]"),
        'basic_i' => $basic_i,
        'basic_e' => $basic_e,
        'basic_pi' => $basic_pi,
        'basic_pa' => $basic_pa,
        'basic_ata_chapter' => $this->input->post("basic_ata_chapter[$i]")
    );
    
    // 将当前行添加到总数组中
    $basic_data_list[] = $row_data;
}

// 可通过print_r($basic_data_list)测试输出所有行数据

额外说明

  • 若你使用PHP7.0以下版本,无法使用??运算符,可替换为isset()判断:
    $basic_i = isset($this->input->post("basic_i[$i]")) ? 1 : 0;
    
  • 确保表单以method="post"提交,且所有动态生成的表单元素name属性格式(如basic_category[$index0])正确,PHP会自动解析为数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:34:27