Best way to handle dynamic amount of form fields in PHP?

后端 未结 2 854
既然无缘
既然无缘 2021-02-04 19:22

I have a system where I need to list an arbitrary amount of employees with a textfield for each day of the week where an \"hours worked\" value can be entered.

So I need

相关标签:
2条回答
  • 2021-02-04 19:54

    I've never used the Laravel framework, but in general I do this in PHP:

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

    This way you will have an array of hours values in the POST, and you can reference the corresponding field by id if you need to. The first field will have id="hours_1", etc. Alternately, if you don't want to use the $key from the query, you can do this:

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

    When you capture the values in the POST, you will have an array of values in $_POST['hours']. Remember that it is a zero based array, but you can use a foreach loop to iterate through the values.

    0 讨论(0)
  • 2021-02-04 20:02

    <input type="text" name="hoursWorked[]" /> will internally convert to an array under $_POST['hoursWorked']. That means you can do something like this:

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

    Then, in 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
        }
    }
    
    0 讨论(0)
提交回复
热议问题