如何在下一页显示输入信息?

时间:2018-11-01 08:52:00

标签: php html

我有一个html文件,其中包含以下代码:

<input type="button" id="styles" value="Add More" onClick="addRow('data')" /> 

<form action="mail.php" method="post">
<table id="data"><tr><td>
  <select name="selectorfirst" id="styles">
    <option>Yellow</option>
    <option>Green</option>
    <option>Red</option>
  </select>
</td>

<td>
  <select name="selectorsecond" id="styles">
    <option>375</option>
    <option>1000</option>
    <option>5000</option>
  </select>
</td></tr></table>

<input id="styles" type="submit" value="Submit" />
</form>

我也有javascript,它可以通过按一个按钮来复制此表单(因此,例如,我可以有4个具有相同选项和ID的不同表单)。

function addRow(tableID) { var table = document.getElementById(tableID); }

按下按钮后,我需要在下一页的表单中发布这些值。我尝试了下面的代码,但是没有用。

<? $selectorfirst = $_POST['selectorfirst'];
$selectorsecond = $_POST['selectorsecond']; ?>

<table id="data">
  <?php foreach($selector as $key => $value) { ?>
    <tr>
      <td ><?php echo $a+1; ?></td>

      <td>
        <input type="text" id="styles" name="selectorfirst[$key]" value="<?php echo $selectorfirst[$key]; ?>">
      </td>

      <td>
        <input type="text" id="styles" name="selectorsecond[$key]" value="<?php echo $selectorsecond[$key]; ?>">
      </td>

</tr><?php } ?></table>

2 个答案:

答案 0 :(得分:1)

$selector为空或null

foreach需要$selector来保存值,否则它将无法执行。

Documentation

答案 1 :(得分:0)

您需要将数据提交为数组,如下所示:

array(3) { 
    [0]=> array(2) {
        ["first"]=> string(6) "Yellow" 
        ["second"]=> string(3) "375" 
    } 
    [1]=> array(2) {
        ["first"]=> string(5) "Green" 
        ["second"]=> string(4) "1000"
    }
    [2]=> array(2) { 
        ["first"]=> string(3) "Red" 
        ["second"]=> string(4) "5000"
    }
}

每个数组元素都包含表行之一的数据。它们再次由具有第一和第二值的数组表示。在html中,它看起来像这样:

<td>
    <select name="selector[0][first]" id="styles">
        <option>Yellow</option>
        <option>Green</option>
        <option>Red</option>
    </select>
</td>

<td>
    <select name="selector[0][second]" id="styles">
        <option>375</option>
        <option>1000</option>
        <option>5000</option>
    </select>
</td>

通过在名称标签中添加方括号,这些值将存储为一个数组(名为selector,在这种情况下,向第0个节点提交键firstsecond

我写了一些快速而肮脏的JS函数,但这确实可以做到:

var counter = 0;
function addRow(tableID) {
    var table = document.getElementById(tableID);
    var tablerow = table.rows[0].innerHTML;
    var tablerow = tablerow.replace(/name="selector\[\d+\]/g, 'name="selector['+ ++counter +']');
    table.getElementsByTagName('tbody')[0].innerHTML += '<tr>' + tablerow + '</tr>';
}

简而言之,它将获取表的第一行,替换name标签的索引,并将其作为新行添加到表中。

然后在mail.php中,获取$_POST['selector']并遍历它:

<?php
    $selector = $_POST['selector'];
?>

<table id="data">
    <?php foreach($selector as $key => $value) { ?>
    <tr>
        <td ><?php echo $key; ?></td>

        <td>
            <input type="text" id="styles" name="selectorfirst[$key]" value="<?php echo $value['first']; ?>">
        </td>

        <td>
            <input type="text" id="styles" name="selectorsecond[$key]" value="<?php echo $value['second']; ?>">
        </td>

    </tr>
    <?php } ?>
</table>