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 に答える