首页 > 解决方案 > PHP post 数组未完成。只收到第一个元素

问题描述

我需要将数组值从动态 html 表发布到 PHP。请参考以下示例:

<!----index.html----->
<script>
function addRow(tableID){
    var table = document.getElementById(tableID);
    var rowCount = table.rows.length;
    var row = table.insertRow(rowCount);
    var colCount = table.rows[0].cells.length;
    for(var i=0; i<colCount; i++) {
       var newcell = row.insertCell(i);
       newcell.innerHTML = table.rows[0].cells[i].innerHTML;
    }
}
</script>
<form role="form" action="php_process.php" method="POST">
  <table id="this_table">
    <tr>
       <td><input type="number" id="data_number" name="data_number[]"></td>
    </tr>
  </table>
  <input type="button" value="Add" onclick="addRow('this_table');">
  <button type="submit" value="1">Save</button>
</form>


<!----php_process.php---->
<?php
$data_submit = $_POST['btn_submit'];
$data_number = $_POST['data_number'];
if($data_submit){
   var_dump($data_number);
   exit();
}
?>

当我提交此表单时,即使我添加了多行,也只显示数组的第一个元素。

Output:
Array ( [0] => 2 )

仅检索到第一个元素。

请帮助我。

我有与上面完全相同的代码,但没有问题。很奇怪。

标签: phphtmldynamichtml-table

解决方案


所以你提供的javascript代码不起作用。但是,以下修改确实使它起作用。

我设置了一个 rowCount 变量,并且 colCount 使用零索引而不是 1,因为您试图获取不存在的行的单元格长度,因此在创建新元素时没有 innerHTML。如果您确实需要使用 [1],因为您的实际表中有额外的行,那么请向我们展示实际的相关代码,以便我们提供帮助

<?php
var_dump($_POST);
?>
<!----index.html----->
<script>
function addRow(tableID){
    var table = document.getElementById(tableID);
    var rowCount = table.rows.length;
    var row = table.insertRow(rowCount);
    var colCount = table.rows[0].cells.length;
    for(var i=0; i<colCount; i++) {
       var newcell = row.insertCell(i);
       newcell.innerHTML = table.rows[0].cells[i].innerHTML;
    }
}
</script>
<form role="form" action="php_process.php" method="POST">
  <table id="this_table">
    <tr>
       <td><input type="number" id="data_number" name="data_number[]"></td>
    </tr>
  </table>
  <input type="button" value="Add" onclick="addRow('this_table');">
  <button type="submit" name="btn_submit" value="1">Save</button>
</form>

我已经对此进行了测试,并且可以正常工作


推荐阅读