2016-12-09 11 views
0

Я создал 2d массив текстовых полей, как это:Как ссылаться 2d массив динамических текстовых полей в 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> 

Я хотел бы цикл через хуг координаты первого и распечатать их на dynamic_process.php. Мне очень сложно понять, как ссылаться на индексы в массиве.

Первый индекс текстового поля [] динамически определяется путем ввода пользователем, второй индекс (тот, у которого есть 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: \ моя_папка \ dynamic_process.php на линии 21

Line 21 это:

ответ

0

когда вы получаете сообщение представить данные, я думаю, вы должны получить доступ к этому

<?php 
foreach ($_POST['txtbox'] as $txtbox) 
{ 

}?> 

или, возможно, это могло бы быть лучше, если в HTML вы не сделать его стать txtbox [] [х], но становятся txtbox [$ я] [х] он станет более удобным для чтения

удачи

0

Здесь много проблем. Слишком много, чтобы перейти, так что это всего лишь «предложенная» попытка исправить это. Это было «проверено», поскольку я отлаживал его.

ПРИМЕЧАНИЕ: Я переименовал некоторые из ваших переменных для удобства чтения (в качестве примера), но у каждого есть свои предпочтения.

<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 

Для отображения результатов: У вас есть 2D массив, так что первый Еогеасп даст вам доступ к элементам 1-го уровня.

Затем вы ссылаетесь на элемент массива непосредственно с вашими названными индексами 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() очень удобно в том, что происходит, что в данном случае сильно отличается от ожидаемого. Всегда убедитесь, что вы знаете, что делают ваши переменные!

Спросите, есть ли у вас какие-либо вопросы.

Смежные вопросы