看了各种类似的问题,无论是在SO还是其他地方,我都有一种可怕的感觉,我想要做的事情是不可能的,但是这里也是如此。
我有一个页面,它是一个文本输入行的表。用户输入每行的信息,并将数据提交到单独的文件,该文件创建PDF。
问题在于我需要用户能够随意向表中添加行,因为数据量可能会有所不同。
[在你去那里之前,我需要指出我不能使用Javascript来实现这一点 - 我知道在JS中很容易做到但是页面需要可以访问。] < / p>
这是一个非常简化的版本,我只是拼凑到一起(希望)说明这一点:
<?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创建页面。
由于种种原因,这并不理想。我真正想要做的是有两个单独的形式,或嵌套的形式。但前者不允许将输入值提交给两者,而后者显然是不良形式(没有双关语意)但不起作用。
是否可以按照我的意愿去做?有什么建议以不同的方式去做吗?
答案 0 :(得分: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是否真的不可避免,他们可以避免这种情况!)