PHP while循环获取表单POST值仅第一个显示该如何修复
问题根因
你的代码里动态构造变量名的语法不符合PHP的解析规则,"$expense".$i这种写法属于字符串拼接表达式,不能作为左值接收赋值,也无法正确生成$expense1、$expense2这类变量,才会出现只有第一个值能正常输出的问题。
修复方案
方案1:修正动态变量语法
用大括号包裹动态生成的变量名,让PHP可以正确解析为可赋值的变量:
$i=1; while ($i < 6) { ${"expense" . $i} = $_POST["expense" . $i]; echo ${"expense" . $i}; $i++; }
方案2(更推荐):用数组存储取值结果
动态变量后续维护成本高,更推荐用数组存储所有取值,后续遍历、计算等处理更灵活:
$expenseList = []; for ($i = 1; $i < 6; $i++) { // 加??判空避免POST值不存在时抛出PHP notice $expenseList[$i] = $_POST["expense" . $i] ?? ''; echo $expenseList[$i]; }
额外优化建议
你可以直接修改表单的name属性为数组格式,不需要手动拼接数字后缀,后续取值更简单:
修改HTML表单代码:
Expenses<br /> <input name="expense[]" type="text" /> <input name="amount[]" type="text" /> <select name="type[]"></select> <br /> <input name="expense[]" type="text" /> <input name="amount[]" type="text" /> <select name="type[]"></select> <!-- 其余表单项以此类推 -->
修改后PHP可以直接获取完整的数组,不用循环拼接key:
$expenseList = $_POST['expense'] ?? []; foreach ($expenseList as $value) { echo $value; }
内容的提问来源于stack exchange,提问作者The Ninja
相关产品推荐
相关产品推荐

