在PHP中处理动态数量的表单字段的最佳方法?

时间:2013-04-04 19:22:16

标签: php html forms laravel laravel-3

我有一个系统,我需要列出一个任意数量的员工,其中包含一周中每天可以输入“工作小时数”值的文本字段。

所以我需要生成一个动态行数的表,每行将包含7个文本字段。我只是想知道在为这些字段分配ID时使用的最佳约定是什么,以便在我的后端收到输入数据后可以轻松迭代?

每一行都有一个与代表员工ID的行相关联的ID号。

能够做类似的事情真是棒极了:

foreach($rows as $row)
{
     $id = $row['id'];

     $employee = Employee::find($id);

     foreach($row['hoursWorked'] as $dailyHours)
     {
           $timecard = new Timecard();
           $timecard->hours = $dailyHours;
           $employee->timecards->insert($timecard);
     }
}

在HTML方面构建表单和ID的最佳方法是什么,以使其尽可能轻松?

作为旁注,我正在Laravel 3框架内工作,以防任何其他解决方案。

2 个答案:

答案 0 :(得分:13)

<input type="text" name="hoursWorked[]" />将在内部转换为$_POST['hoursWorked']下的数组。这意味着你可以这样做:

<input type="text" name="hoursWorked[12345][]" /> <!-- Sunday -->
<input type="text" name="hoursWorked[12345][]" /> <!-- Monday -->
<input type="text" name="hoursWorked[12345][]" /> <!-- Tuesday -->
<input type="text" name="hoursWorked[12345][]" /> <!-- Wednesday -->
<input type="text" name="hoursWorked[12345][]" /> <!-- Thursday -->
<input type="text" name="hoursWorked[12345][]" /> <!-- Friday -->
<input type="text" name="hoursWorked[12345][]" /> <!-- Saturday -->

然后,在PHP中:

<?php
foreach ($_POST['hoursWorked'] as $employeeId=>$dayArray) {
    foreach ($dayArray as $dayOfWeek=>$hoursWorked) {
        // $employeeId will be 12345
        // $dayOfWeek will be 0, 1, 2, 3, 4, 5 ,6
        // $hoursWorked will be the value of the text field
    }
}

答案 1 :(得分:1)

我从未使用过Laravel框架,但总的来说我是用PHP做的:

foreach ($employee as $key=>$e) {
   echo '<input type="text" name="hours[]" id="hours_'.$key.'" value="'.$e.'" />';
}

这样,POST中会有一个小时值数组,如果需要,可以按id引用相应的字段。第一个字段将具有id =“hours_1”等。或者,如果您不想使用查询中的$ key,则可以执行以下操作:

$cntr = 1;
foreach ($employee as $e) {
   echo '<input type="text" name="hours[]" id="hours_'.$cntr.'" value="'.$e.'" />';
   $cntr++;
}

在POST中捕获值时,您将在$_POST['hours']中拥有一组值。请记住,它是一个基于零的数组,但您可以使用foreach循环来遍历值。