如何在表单的确认页面中显示动态HTML表的多行



我正在创建一个HTML表单,其中包含一个可以动态添加行的表。每当在多行中输入数据并点击submit时,它都会将我带到确认页面,其中只显示表中的一行数据。如何显示多行?

HTML(原始表单):

<p>
<div id="rebate_400p">
<strong>400P</strong><br>
</div>
<table id="tables" cellspacing="5">
    <tr align="center" id="table_titles">
        <td>Tier</td>
        <td>Purchase Minimum</td>
        <td>Multiplier</td>
        <td>UOM</td>
        <td>Retro</td>
        <td>Guaranteed</td>
        <td>Paid</td>
        <td>Delete?</td>
        <td>Add Row</td>
    </tr>
    <tr>
        <td align="center" name="tier">1</td>
        <td><input type="text" id="rebate_tables" name="purchase_minimum"></td>
        <td><input type="text" id="rebate_tables" name="multiplier"></td>
        <td><input type="text" id="rebate_tables" name="uom"></td>
        <td><input type="text" id="rebate_tables" name="retro"></td>
        <td><input type="text" id="rebate_tables" name="guaranteed"></td>
        <td><input type="text" id="rebate_tables" name="paid"></td>
        <td><input type="button" id="delRow" value="Delete" onclick="deleteRow(this)"></td>
        <td><input type="button" id="addmoreRowsbutton" value="Add row" onclick="insRow()"></td>
    </tr>
</table>
</p>

HTML/PHP(确认页):

<p>
<div class="border1">
<div id="rebate_400p">
<strong>400P</strong><br>
</div>
<table id="table" cellspacing="20">
    <tr align="center" id="table_row">
        <td>Tier</td>
        <td>Purchase Minimum</td>
        <td>Multiplier</td>
        <td>UOM</td>
        <td>Retro</td>
        <td>Guaranteed</td>
        <td>Paid</td>
    </tr>
    <tr align="center">
        <td>1</td>
        <td><?php echo $_POST['purchase_minimum']; ?></td>
        <td><?php echo $_POST['multiplier']; ?></td>
        <td><?php echo $_POST['uom']; ?></td>
        <td><?php echo $_POST['retro']; ?></td>
        <td><?php echo $_POST['guaranteed']; ?></td>
        <td><?php echo $_POST['paid']; ?></td>
    </tr>
</table>
</div>
</p>

Javascript(在原始表单页面上动态添加行):

function insRow()
{
  console.log('hi');
  var x=document.getElementById('tables');
  var new_row = x.rows[1].cloneNode(true);
  var len = x.rows.length;
  new_row.cells[0].innerHTML = len;
  var inp1 = new_row.cells[1].getElementsByTagName('input')[0];
  inp1.id += len;
  inp1.value = '';
  var inp2 = new_row.cells[2].getElementsByTagName('input')[0];
  inp2.id += len;
  inp2.value = '';
  var inputs = new_row.querySelectorAll('input[type=text]');
  for(var i=0;i<inputs.length;i++)
    inputs[i].value='';

  x.appendChild(new_row)
}

好的。所以,你的问题是你的输入有相同的名字,所以当它们在$_POST中传递时,它们会相互覆盖。而且,即使不是这种情况,也没有办法避免确认页面上的PHP循环。

在JS函数中:

function insRow()
{
  var x=document.getElementById('tables');
  var new_row = x.rows[1].cloneNode(true);
  var len = x.rows.length;
  new_row.cells[0].innerHTML = len;
  var inp1 = new_row.cells[1].getElementsByTagName('input')[0];
  inp1.id += len;
  inp1.value = '';
  var inp2 = new_row.cells[2].getElementsByTagName('input')[0];
  inp2.id += len;
  inp2.value = '';
  var inputs = new_row.querySelectorAll('input[type=text]');
  for(var i=0;i<inputs.length;i++)
  {
      inputs[i].value='';
      inputs[i].name='rows[' + len + '][' + inputs[i].dataset.name + ']';
  }
  x.appendChild(new_row)
}

在这里,当我们添加新行时,我们给输入一个新的名称,所以它们在传递时不会被覆盖。

在你的HTML表单中:

<tr>
            <td align="center" name="tier">1</td>
            <td><input type="text" id="rebate_tables" data-name="purchase_minimum" name="rows[0][purchase_minimum]"></td>
            <td><input type="text" id="rebate_tables" data-name="multiplier" name="rows[0][multiplier]"></td>
            <td><input type="text" id="rebate_tables" data-name="uom" name="rows[0][uom]"></td>
            <td><input type="text" id="rebate_tables" data-name="retro"  name="rows[0][retro]"></td>
            <td><input type="text" id="rebate_tables" data-name="guaranteed" name="rows[0][guaranteed]"></td>
            <td><input type="text" id="rebate_tables" data-name="paid" name="rows[0][paid]"></td>
            <td><input type="button" id="delRow" value="Delete" onclick="deleteRow(this)"></td>
            <td><input type="button" id="addmoreRowsbutton" value="Add row" onclick="insRow()"></td>
        </tr>

我们正在把你的输入变成一个数组,这样可以传递多个值。

确认页面:

<?php if(isset($_POST['rows'])): ?>
    <table id="table" cellspacing="20">
        <tr align="center" id="table_row">
            <td>Tier</td>
            <td>Purchase Minimum</td>
            <td>Multiplier</td>
            <td>UOM</td>
            <td>Retro</td>
            <td>Guaranteed</td>
            <td>Paid</td>
        </tr>
        <?php 
            $count = 1;
            foreach($_POST['rows'] as $row): 
        ?>
            <tr align="center">
                <td><?php echo $count; ?></td>
                <td><?php echo $row['purchase_minimum']; ?></td>
                <td><?php echo $row['multiplier']; ?></td>
                <td><?php echo $row['uom']; ?></td>
                <td><?php echo $row['retro']; ?></td>
                <td><?php echo $row['guaranteed']; ?></td>
                <td><?php echo $row['paid']; ?></td>
            </tr>
        <?php 
            $count++;
            endforeach; 
        ?>
    </table>
<?php endif; ?>

我们只是循环遍历每一行

相关内容

  • 没有找到相关文章

最新更新