2013-09-19 2 views
1

У меня есть форма записи часов работы над набором проектов. форма использует массив для идентификатора проекта, часов и поля примечаний, при этом строки форм представляют собой цикл по числу проектов. форма передает данные скрипту PHP для обработки. PHP-скрипт не видит значения в массиве ... это просто дает мне «Массив» в качестве вывода.Передача данных массива из html-формы в переменные массива php

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

В форме:

<form action="input-hours-do.php" method="post"> 

<table> 

<tr> 
<td>Project</td> 
<td>Hours</td> 
<td>Notes</td> 
</tr> 

<? 

// assign project IDs 

$rhprID[0] = "ABT"; 
$rhprID[1] = "GHUR"; 
$rhprID[2] = "TRE"; 
$rhprID[3] = "WERT"; 

// loop on the projects 

for ($i = 0; $i < 3; $i++) 
    { 
    ?> 

    <!-- project id is not editable --> 

    <input type="hidden" name="rhprID[]" value="<? echo $rhprID[$i]; ?>" /> 

     <tr> 
      <td> 
       <?php echo $rhprID[$i] ?> 
      </td> 

      <td> 
       <input type="text" name="rhHours[]" size="6" /> 
      </td> 

      <td> 
       <input type="text" name="rhNotes[]" size="40" /> 
      </td> 
     </tr> 

     <? 
     } // end of i for loop 

?> 

</table> 


<input type="submit" name="tUpdate" size="8" value="Submit Hours" /> 

</form> 

в сценарии действий (входные часа-do.php):

$rhprID = $_POST['rhprID']; 
$rhHours = $_POST['rhHours']; 
$rhNotes = $_POST['rhNotes']; 

echo "count of prid is " . count($rhprID) . "</br>"; 

for ($k = 0; $k < count($rhprID); $k++) 
    { 
    echo " prID is: " . $rhprID[$k] . " hours are: " . $rhHours[$k] . " notes are: " .  $rhNotes[$k]; 
    } 

?> 

Выход из этого является:

Количество rhprid составляет 1

prID: Часы: примечания: A

Итак:

  • это, кажется, думает массив только один элемент длиной
  • это не добираясь до значений в массиве («A» является первой буквой «Массив», поэтому он просто использует строковую переменную, а не базовые значения данных).

Что мне нужно изменить, чтобы перейти к базовым значениям данных?

+0

Код, который вы вставили здесь, работает (за исключением добавления 1 в цикл или лучшего использования 'f oreach'). Он отображает 3 элемента на выходе. Убедитесь, что у вас нет синтаксической ошибки где-то в другом месте. –

+0

спасибо за ваш ввод .... У меня был какой-то предыдущий код, который применял обрезку к POST данных. Когда я взял этот код, все работало, как ожидалось. – steve

ответ

1

место PHP коды <?php ?> тега не <? ?>, и это будет просто отлично:

<form action="input-hours-do.php" method="post"> 

    <table> 

    <tr> 
     <td>Project</td> 
     <td>Hours</td> 
     <td>Notes</td> 
    </tr> 

    <?php /* changed <? to <?php */ 

    // assign project IDs 

    $rhprID[0] = "ABT"; 
    $rhprID[1] = "GHUR"; 
    $rhprID[2] = "TRE"; 
    $rhprID[3] = "WERT"; 

    // loop on the projects 

    for ($i = 0; $i < 4; $i++) /* changed $i<3 to $i<4 */ 
    { 
    ?> 

    <!-- project id is not editable --> 

    <input type="hidden" name="rhprID[]" value="<?php /* changed <? to <?php */ echo $rhprID[$i]; ?>" /> 

    <tr> 
     <td> 
     <?php /* changed <? to <?php */ echo $rhprID[$i] ?> 
     </td> 

     <td> 
     <input type="text" name="rhHours[]" size="6" /> 
     </td> 

     <td> 
     <input type="text" name="rhNotes[]" size="40" /> 
     </td> 
    </tr> 

    <?php /* changed <? to <?php */ 
    } // end of i for loop 

    ?> 

    </table> 


    <input type="submit" name="tUpdate" size="8" value="Submit Hours" /> 

</form> 

и ввод-часов-do.php файла написать этот код:

<?php /* changed <? to <?php */ 
$rhprID = $_POST['rhprID']; 
$rhHours = $_POST['rhHours']; 
$rhNotes = $_POST['rhNotes']; 

echo "count of prid is " . count($rhprID) . "</br>"; 

for ($k = 0; $k < count($rhprID); $k++) 
    { 
    echo " prID is: " . $rhprID[$k] . " hours are: " . $rhHours[$k] . " notes are: " .  $rhNotes[$k]; 
    } 

?> 

UPDATE: у вас есть 4 идентификатора проекта, поэтому вам нужно отредактировать $ i в вашем цикле for, чтобы быть меньше 4, а не 3,

+0

извините .... это не исправило .... steve – steve

+0

Я проверил! он сделал, как вы запускаете свой код? Я использую wamp-сервер, есть ли у вас какая-нибудь услуга для запуска вашего кода? –

+0

Да .... его успешно работает на сервере в gogaddy – steve

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