我有一个表格,最终会创建一个以管道分隔的文本文件。表单包含多行,每行包含多个名为1_cat[]
,2_cat[]
,3_cat[]
等的下拉字段。
在表单提交脚本中,我有:
if ($submit) {
foreach($_POST['videofile'] as $row=>$item)
{
$videofile = $_POST['videofile'][$row];
$videotype = $_POST['videotype'][$row];
for($i=0; $i<=$drop_fields; $i=$i+1) {
$val = $i."_cat[".$row."]"; // HERE'S WHERE I'M HAVING DIFFICULTY
$cat = $cat.$val.",";
}
print "$videofile|$videotype|$cat";
$cat = "";
}
}
下面的代码会输出1_cat[0],2_cat[0],3_cat[0]
,1_cat[1],2_cat[1],3_cat[1]
等 - 所以它会显示名称,但不会显示我想要的变量值。
非常感谢任何帮助。
答案 0 :(得分:1)
通常,如果$val
包含您要引用的变量的名称,$$val
将为您提供该变量的值。在您的情况下,由于您也在索引数组,因此编写它会稍微复杂一些。
您需要更改
$val = $i."_cat[".$row."]"; // HERE'S WHERE I'M HAVING DIFFICULTY
$cat = $cat.$val.",";
到
$val = $i."_cat";
$cat = $cat.${$val}[$row].",";
有关所有详细信息,请参阅variable variables上的PHP文档部分。
此外,变量名称不能以数字开头,因此您需要稍微调整命名方案。
更新:修复了代码(索引到数组中稍微复杂一点),添加了变量名称注释。
<强> See it in action 强>
答案 1 :(得分:1)
此代码段中有几件事需要更正:
valid variable name以字母或下划线开头,后跟任意数量的字母,数字或下划线。 1_cat
不是有效的变量名称。如果您希望将表单字段用作变量名,则需要更改表单中的字段名称。
videofile
需要$
:$videofile
for
循环计数器可以这样递增:$i++
。这比$i=$i+1
更清晰,更标准。
$cat = $cat.$val.",";
行在初始化之前使用$cat
。您应该在循环开始之前为$cat
提供初始值。
答案 2 :(得分:0)
我猜你的HTML页面中的字段名称实际上被称为<select name="1_cat[0]">
之类的东西?
你可以使用你的循环来访问它们,如下所示:
$_POST[$i . '_' . 'cat'][0] ... or .... $_POST["{$i}_cat"][0]
$_POST[$i . '_' . 'cat'][1] ... or .... $_POST["{$i}_cat"][1]
$_POST[$i . '_' . 'cat'][2] ... or .... $_POST["{$i}_cat"][2]
etc...
除非你打开register_globals(你没有,对吗?请告诉我你没有...),所以永远不会有一个名为$1_cat[0]
的PHP变量。