0

我有一个最终将创建一个以管道分隔的文本文件的表单。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]——所以它显示了这些变量的名称,而不是我希望它做的那些变量的值。

任何帮助将不胜感激。

4

3 回答 3

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 文档部分。

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

更新:修复了代码(索引到数组中编写起来稍微复杂一些),添加了变量名注释。

看到它在行动

于 2011-09-06T19:32:05.590 回答
1

此代码段中有几处需要更正:

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

videofile需要一个$$videofile

for循环计数器可以像这样递增:$i++. 这比$i=$i+1.

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

于 2011-09-06T19:38:47.637 回答
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 (你没有,对吗?请告诉我你没有......),永远不会有一个 PHP 变量以$1_cat[0]开头命名。

于 2011-09-06T19:44:35.027 回答