如何仅用PHP和HTML实现终端readline()的数组录入功能?
问题描述
原本在终端运行的PHP代码(通过readline()循环录入3组time和money生成二维数组)无法在浏览器中运行,尝试用PHP+HTML实现时,表单提交后仅能获取最后一个输入项的值,希望找到无需JavaScript的实现方法。
终端可运行的PHP代码:
<?php $a = array(); for($i=0; $i<3; $i++){ $b = readline('time: '); $c = readline('money: '); $d = array('time'=>$b, 'money'=>$c); array_push($a, $d); } print_r($a);
尝试的问题代码:
<form method="POST"> <?php for($i=0; $i<3; $i++){ ?> <input name = 'time'> <input name = 'money'> <?php } ?> <input type="submit"> </form> <?php print_r($_POST['time']); ?>
解决方案
核心问题是表单中同名输入会被最后一个值覆盖,要让PHP接收为数组,只需调整输入框的name属性命名方式,以下两种方案都无需JavaScript:
方案一:分组式命名(推荐)
直接给每组输入设置带索引的嵌套命名,提交后可直接得到和终端代码一致的二维数组:
<form method="POST"> <?php for($i=0; $i<3; $i++){ ?> <div> <input name="data[<?php echo $i; ?>][time]" placeholder="请输入时间"> <input name="data[<?php echo $i; ?>][money]" placeholder="请输入金额"> </div> <?php } ?> <input type="submit" value="提交"> </form> <?php // 仅在POST请求时处理输出 if ($_SERVER['REQUEST_METHOD'] === 'POST') { print_r($_POST['data']); } ?>
提交后$_POST['data']的结构和你终端代码生成的$a完全一致,直接就能使用。
方案二:独立数组命名
如果不想用嵌套命名,也可以给每个输入的name加上[],让PHP把同名输入收集为数组,之后再手动组合成目标二维数组:
<form method="POST"> <?php for($i=0; $i<3; $i++){ ?> <div> <input name="time[]" placeholder="请输入时间"> <input name="money[]" placeholder="请输入金额"> </div> <?php } ?> <input type="submit" value="提交"> </form> <?php if ($_SERVER['REQUEST_METHOD'] === 'POST') { $result = []; // 遍历time数组,对应组合每组的time和money foreach($_POST['time'] as $index => $time) { $result[] = [ 'time' => $time, 'money' => $_POST['money'][$index] ]; } print_r($result); } ?>
内容的提问来源于stack exchange,提问作者bungee1980
相关产品推荐
相关产品推荐

