2013-04-04 37 views
5

Tôi có một hệ thống mà tôi cần liệt kê số lượng nhân viên tùy ý với một trường văn bản cho mỗi ngày trong tuần có thể nhập giá trị "giờ làm việc".Cách tốt nhất để xử lý số lượng động các trường biểu mẫu trong PHP là gì?

Vì vậy, tôi cần tạo bảng có số hàng động và mỗi hàng sẽ chứa 7 trường văn bản. Tôi chỉ tự hỏi quy ước tốt nhất để sử dụng khi gán ID cho các trường này là gì để dễ dàng lặp lại khi tôi nhận được dữ liệu đầu vào trên đầu sau của mình?

Mỗi hàng sẽ có một số ID được liên kết với hàng đại diện cho ID của nhân viên.

Nó sẽ là tuyệt vời để có thể làm điều gì đó như:

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

cách tốt nhất để cấu trúc hình thức của tôi và ID đầu vào của tôi ở phía bên HTML để làm cho điều này như đau càng tốt là gì?

Là một sidenote, tôi đang làm việc trong khuôn khổ Laravel 3 trong trường hợp mở ra bất kỳ giải pháp nào khác.

+1

'' sẽ chuyển đổi nội bộ thành mảng dưới '$ _POST ['hoursWorked']' –

Trả lời

12

<input type="text" name="hoursWorked[]" /> sẽ chuyển nội bộ thành mảng dưới $_POST['hoursWorked']. Điều đó có nghĩa bạn có thể làm một cái gì đó như thế này:

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

Sau đó, trong 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 
    } 
} 
+2

Hoàn hảo việc này sẽ làm chính xác những gì tôi cần, cảm ơn! – ARW

+1

Điều này thật tuyệt vời, tôi không biết bạn có thể sắp xếp đầu vào thành nhiều mảng như thế này. Cảm ơn!! –

1

Tôi chưa bao giờ sử dụng khuôn khổ Laravel, nhưng nói chung tôi làm điều này trong PHP:

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

Bằng cách này bạn sẽ có một dãy giá trị giờ trong POST và bạn có thể tham chiếu trường tương ứng theo id nếu bạn cần. Các lĩnh vực đầu tiên sẽ có id = "HOURS_1", vv Cách khác, nếu bạn không muốn sử dụng phím $ từ truy vấn, bạn có thể làm điều này:

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

Khi bạn nắm bắt được giá trị trong POST , bạn sẽ có một mảng giá trị trong $_POST['hours']. Hãy nhớ rằng nó là một mảng không dựa trên, nhưng bạn có thể sử dụng một vòng lặp foreach để lặp qua các giá trị.

Các vấn đề liên quan