2016-12-09 16 views
0

にダイナミックテキストボックスの2次元配列を参照するために:私はこのようなテキストボックスの2次元配列を作成しているどのようにPHP

<form name="form1" Method="POST" ACTION="dynamic_process.php"> 

     <?php for($i = 1; $i <= $userinput; $i++) 
     { 
      echo '(X'.$i.' '; ?> 
      <input id="txtbox" name="txtbox[][x]" type="text" /> 
      <?php echo ', Y'.$i.' '; ?> 
      <input id="txtbox" name="txtbox[][y]" type="text" /> 
      <?php echo ', Z'.$i.' '; ?> 
      <input id="txtbox" name="txtbox[][z]" type="text" /> 
     <?php echo ')<br>'; 
     } ?>  
     <br> 
    <input type="hidden" name="MaxCoordinates" value="<?php echo $userinput?>"> 
    <input type="submit" name="submit_coordinates" value="submit" /> 
</form> 

は私がxyzは最初の座標を順番に好き、とにそれらをプリントアウトしたいですdynamic_process.phpページ。配列内のインデックスを参照する方法を理解するのが非常に困難です。

テキストボックス[]の最初のインデックスはユーザー入力によって動的に決定され、2番目のインデックス(x、y、またはzを含むインデックス)はユーザーの入力によって決定されません。

dynamic_process.phpからテキストボックスを参照しようとする私の試みは、このように見えます。

<?php 
foreach ($_POST['txtbox[]'] as $txtbox) 
{ 
    echo '<br>'; 
    foreach (txtbox[][] as $point) 

     echo ' '.$txtbox[]['X']. ', '; 
     echo ' '.$txtbox[]['Y']. ', '; 
     echo ' '.$txtbox[]['Z']. ', '; 
    } 
}?> 

それがロードするとき、私はページ上で、このエラーを取得する:

致命的なエラー:Cで読み込むための[]を使用することはできません:行の\ myfolderなどの\のdynamic_process.phpを21

ライン21これは、次のとおりです。

答えて

0

あなたはポストのデータを提出し得るとき、私はあなたが

でアクセスすべきだと思います

またはあなたはそれが[] [X]が、なっtxtbox [$ i]と[x]は、それが読みやすくなります

幸運

0

txtboxなることはありませHTMLであれば、多分それはより良いかもしれませんここには多くの問題があります。あまりにも多くの問題があります。したがって、これはこれを修正するための「示唆された」試みです。これは、私がそれをデバッグしていたときに「テスト済み」でした。

メモ:私は可読性のために変数の名前を変更しましたが(例として)、誰もが自分の好みを持っています。 あなたは2次元配列を持っているので、まず、foreachのは、あなたが1レベル要素にアクセスできるようになります:結果を表示するには

<form name="form1" method="POST" action="dynamic_processt.php"> 
    <?php 
    // Added for testing as this is not specified in the supplied code 
    $user_input = 2; 
    // If you are going to use ID's, each id has to be unique, 
    // so I have just come up with "something" to make them different. 
    // Why do you even need id's? 
    for ($i = 1; $i <= $user_input; $i ++) { 
     // This can be refactored a lot as it is not beautiful. 
     echo '(X' . $i . ' '; ?> 
     <input id="text_box_1_<?= $i;?>" name="text_box[<?= $i;?>][x]" type="text"/> 
     <?php echo ', Y' . $i . ' '; ?> 
     <input id="text_box_2_<?= $i;?>" name="text_box[<?= $i;?>][y]" type="text"/> 
     <?php echo ', Z' . $i . ' '; ?> 
     <input id="text_box_3_<?= $i;?>" name="text_box[<?= $i;?>][z]" type="text"/> 
     <?php echo ')<br>'; 
    } ?> 
    <br> 
    <input type="hidden" name="MaxCoordinates" value="<?php echo $user_input ?>"> 
    <input type="submit" name="submit_coordinates" value="submit"/> 
</form> 
<?php 

次に、指定したx、y、zインデックスで配列要素を直接参照します。 var_dump($ _ POST)を使用すると、配列の実際の構造が表示されます。

たとえば、$ _POSTでは配列がありますが、変数名だけで参照する必要があることに注意してください。

// Debug 
var_dump($_POST); // What does the structure of $_POST Look like? 

foreach ($_POST['text_box'] as $text_box) { 
    echo '<br>'; 
    echo ' ' . $text_box['x'] . ', '; 
    echo ' ' . $text_box['y'] . ', '; 
    echo ' ' . $text_box['z'] . ', '; 

} ?> 

は、あなたが、これはよりよい作るためにできることのトンがありますが、私はあなたにそれを残しておきます。

var_dump()の使用は、何が起こっているかを見るのに非常に便利です。この場合は、あなたが期待しているものと大きく異なります。常にあなたの変数が何をしているかを確認してください!

質問がある場合は質問してください。