Отображение значения динамической переменной - PullRequest
0 голосов
/ 06 сентября 2011

У меня есть форма, которая в конечном итоге создаст текстовый файл с разделителями.Форма содержит несколько строк, каждая строка имеет несколько раскрывающихся полей с именами 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] и т. д. - поэтому он отображает имена, но не значения этих переменных, как я хотел бы.

Любая помощь будет принята с благодарностью.

Ответы [ 3 ]

1 голос
/ 06 сентября 2011

В этом фрагменте кода есть несколько вещей, которые следует исправить:

A допустимое имя переменной начинается с буквы или подчеркивания, за которыми следует любое количество букв, цифр или подчеркиваний. 1_cat не является допустимым именем переменной. Если вы хотите использовать поля формы в качестве имен переменных, вам необходимо изменить имена полей в форме.

videofile нужен $: $videofile

Счетчик цикла for можно увеличить следующим образом: $i++. Это чище и стандартнее, чем $i=$i+1.

В строке $cat = $cat.$val.","; используется $cat до ее инициализации. Вы должны указать начальное значение для $cat до начала цикла.

1 голос
/ 06 сентября 2011

Обычно, если $val содержит имя переменной, на которую вы хотите сослаться, $$val даст вам значение этой переменной. В вашем случае, так как вы также индексируете массив, писать немного сложнее.

Вам нужно изменить

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

до

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

Подробнее см. В разделе документации PHP переменные .

Кроме того, имена переменных не могут начинаться с цифр, поэтому вам придется немного изменить схему именования.

Обновление: Исправлен код (индексирование в массив для записи немного сложнее), добавлено имя переменной note.

увидеть его в действии .

0 голосов
/ 06 сентября 2011

Я предполагаю, что ваши имена полей на 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] для начала.

...