2011-09-06 78 views
0

我有一个表单,最终将创建一个管道分隔文本文件。该表格包含的每一行都有多个下拉2_cat[]命名1_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]等的代码 - 所以它显示名称,但不显示这些变量的值,因为我希望这样做。

任何帮助将不胜感激。

回答

1

有此代码段中的几个事情,应该予以纠正:

一个valid variable name以字母开头或下划线,其次是任意数量的字母,数字或下划线。 1_cat不是有效的变量名称。如果您希望将表单字段用作变量名称,则需要更改表单中的字段名称。

videofile需要$$videofile

for循环计数器可以这样递增:$i++。这比$i=$i+1更清洁和更标准。

$cat = $cat.$val.",";在初始化之前使用$cat。您应该在循环开始之前为$cat提供一个初始值。

+0

谢谢。这就是诀窍! – MarkHFLA

1

通常,如果$val持有名称要引用变量的$$val会给你该变量的值。就你而言,由于你也在索引数组,所以写起来稍微复杂一些。

您需要更改

$val = $i."_cat[".$row."]"; // HERE'S WHERE I'M HAVING DIFFICULTY 
$cat = $cat.$val.","; 

$val = $i."_cat"; 
$cat = $cat.${$val}[$row].","; 

参考PHP文档部分上variable variables的所有细节。

此外,变量名称不能以数字开头,所以您需要稍微调整命名方案。

更新:修正了代码(编入数组稍微复杂些),添加了变量名称注释。

See it in action

+0

我不认为这适用于数组。 –

+0

因为'1_cat'是一个数组,所以你需要这样做:'$ arr = $ i .'_ cat'; $ val = $$ arr; $ cat = $ cat。$ val [$ row]。“,”;'。另外,BTW,'1_cat'不是一个有效的变量名称。 –

+0

@火箭:我没有测试过,但现在应该没问题。 – Jon

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变量开始。

+0

另外,PHP变量不能以数字开头,所以'$ 1_cat'是无效的。 –