0

在查看了关于 SO 和其他地方的各种类似问题后,我有一种可怕的感觉,我想做的事情是不可能的,但是就这样。

我有一个页面是文本输入行的表格。用户在每一行输入信息,然后将数据提交到一个单独的文件中,从而创建一个 PDF。

问题是我需要用户能够随意向表中添加行,因为数据量可能会有所不同。

[在你去那里之前,我需要指出我不能使用 Javascript 来做任何事情——我知道在 JS 中很容易做到,但页面需要是可访问的。]

这是一个非常简化的版本,我只是拼凑起来(希望)说明这一点:

<?php 
  if (filter_has_var(INPUT_POST, 'add_rows')) {
    $howmanyrows = filter_input(INPUT_POST, 'howmanyrows', FILTER_SANITIZE_NUMBER_INT);
    //get all the data from table and put it in an array, 
    //then add 5 (or however many) new rows to said array.
  }
  else if (filter_has_var(INPUT_POST, 'send_data')) {
    //get table data, add to session and redirect to other page with a header()
  }
 ?>
<html>
  <form action="" method="POST">
    <table>
      <?php //table rows added using an array of data 
        foreach ($data as $d): ?>
          <tr><td><input type="text" value="<?php echo $d; ?>"></td></tr>
      <?php endforeach; ?>

    </table>
    <input type="text" name="howmanyrows" value="5">
    <input type="submit" name="add_rows">

    <input type="submit" name="send_data">

  </form>
...
</html>

如您所见,目前我有一个笨拙的设置,其中只有一个表单包含整个页面,并将页面提交给自己。根据单击的按钮,添加新行或将数据提交到 PDF 创建页面。

这并不理想,原因有很多。我真正想做的是有两个单独的表格,或嵌套表格。但是前者不允许将输入值提交给两者,而后者显然是错误的形式(没有双关语)并且不起作用。

有没有可能让它做我想做的事情?有什么建议可以采取不同的方式吗?

4

1 回答 1

0

我认为你有最好的非 JavaScript 解决方案——当然是我会用它运行的方式。

更容易的一件事是您可以使用多个具有相同名称的输入:

<input name="tablerow[]" type="text" value="A" />
<input name="tablerow[]" type="text" value="B" />
<input name="tablerow[]" type="text" value="C" />

这些通过 $_POST['tablerow'] 作为一个数组。数组的长度是字段的数量。然后向其中添加其他字段。


对于可访问性,您应该在顶部添加一个链接,允许用户直接跳到第一个“新”字段 - 否则他们需要通过整个表单来跳转到新字段。(请参阅我上面关于 JS 是否真的无法避免的评论,他们可以避免这种情况!)

于 2012-05-24T12:22:40.147 回答