Лучший способ обработки динамического количества полей формы в PHP?

У меня есть система, в которой мне нужно указать произвольное количество сотрудников с текстовым полем для каждого дня недели, где может быть введено значение «отработанные часы».

Поэтому мне нужно создать таблицу с динамическим количеством строк, и каждая строка будет содержать 7 текстовых полей. Мне просто интересно, какое лучшее соглашение использовать при назначении идентификатора этим полям, чтобы упростить итерацию, как только я получу входные данные на моем заднем конце?

Каждая строка будет иметь идентификационный номер, связанный с строкой, которая представляет идентификатор сотрудника.

Было бы замечательно иметь возможность сделать что-то вроде:

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, чтобы сделать это максимально безболезненным?

В качестве опоры я работаю в рамках Laravel 3 в случае, когда вы открываете любые другие решения.

Related of "Лучший способ обработки динамического количества полей формы в PHP?"

<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 } } 

Я никогда не использовал структуру Laravel, но в целом я делаю это на PHP:

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

Таким образом, у вас будет массив значений часов в POST, и вы можете ссылаться на соответствующее поле по id, если вам нужно. Первое поле будет иметь id = "hours_1" и т. Д. В противном случае, если вы не хотите использовать ключ $ из запроса, вы можете сделать это:

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

Когда вы фиксируете значения в POST, у вас будет массив значений в $_POST['hours'] . Помните, что это массив с нулевым значением, но вы можете использовать цикл foreach для повторения значений.