dongxi8993
2019-07-18 04:32
浏览 45
已采纳

存储来自多个输入字段的数组值 - Laravel

What I'm trying to do is Schedule form represent in table with input field like day, start time, and end time.

In blade file, I have an array that I assigned values which is represent days (7 in total). The reason I put in array cause I don't want to write html code 7 times. I do FOR loop to display input field with assigned value.

Then, I want to input another value which is 'start time' and 'end time' according to each day.

Below is my code

In blade


    <?php
          $days = array("Monday","Tuesday","Wednesday","Thursday","Friday","Satuday");
          $daylength=count($days);

          for($i=0; $i<$daylength; $i++)
          {
     ?>
            <tr>
            <td><input type="text" name="day[]" class="form-control" value="{{ $days[$i] }}" disabled/></td>
            <td><input type="time" name="start_time[]" class="form-control"/></td>
            <td><input type="time" name="end_time[]" class="form-control"/></td>
            <td></td>
            </tr>

    <?php } ?>

In controller

$days = $request->input('day');
$start_time = $request->input('start_time');
$end_time = $request->input('end_time');
$zone_id = $zone->id;

    for($count = 0; $count < count($days); $count++)
    {
        $data = array(
                'day' => $days[$count],
                'start_time'  => $start_time[$count],
                'end_time'  => $end_time[$count],
                'zone_id'  => $zone_id,
              );

        $insert_schedule[] = $data; 
     }
     Schedule::insert($insert_schedule);

What I expected, it should store input values into database table. The problem is after submitting the form, controller request empty value.

The error shown :

count(): Parameter must be an array or an object that implements Countable

Hope anyone can help. Thank you in advanced.

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • dongqigu0429 2019-07-18 04:46
    已采纳

    disabled input won't submit. You need to use readonly if you want to make it not editable by user.

    <input type="text" name="day[]" class="form-control" value="{{ $days[$i] }}" readonly/>
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • duan032225 2019-07-18 04:42

    Change

    <input type="text" name="day[]" class="form-control" value="{{ $days[$i] }}" disabled/>
    

    To

    <input type="text" name="day[]" class="form-control" value="{{ $days[$i] }}" />
    

    Disabled inputs will not submit with the form request. You'll have to use a different technique if you don't want a user to be able to change the value. Can it be hidden?

    评论
    解决 无用
    打赏 举报
  • doutuo1908 2019-07-18 04:52

    try this:

     for ($i = 0; $i < $start_time; $i++) {
        foreach ($days as $day) {
          $insert_array[] = array(
          'day' => $day[$i ],
            'start_time'  => $start_time[$i ],
            'end_time'  => $end_time[$i ],
            'zone_id'  => $zone_id,
              );
             }
           }
    
    评论
    解决 无用
    打赏 举报
  • donglianer5064 2019-07-18 04:55

    There is a problem in count() function try :

    for($count = 0; $count < collect($days)->count(); $count++)
    {
        $data = array(
                'day' => $days[$count],
                'start_time'  => $start_time[$count],
                'end_time'  => $end_time[$count],
                'zone_id'  => $zone_id,
              );
    
        $insert_schedule[] = $data; 
     }
    
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题