【问题标题】:Store array values from multiple input field - Laravel存储来自多个输入字段的数组值 - Laravel
【发布时间】:2019-07-18 04:32:06
【问题描述】:

我正在尝试做的是在表格中表示时间表表单,其中包含日期、开始时间和结束时间等输入字段。

在刀片文件中,我有一个数组,我分配了代表天数(总共 7 天)的值。我放入数组的原因是我不想编写 7 次 html 代码。我做 FOR 循环以显示具有分配值的输入字段。

然后,我想根据每一天输入另一个值,即“开始时间”和“结束时间”。

下面是我的代码

在刀片中


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

在控制器中

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

正如我所料,它应该将输入值存储到数据库表中。问题是提交表单后,控制器请求空值。

显示的错误:

count():参数必须是数组或者实现的对象 可数的

希望任何人都可以提供帮助。提前谢谢你。

【问题讨论】:

  • 可能因为输入被禁用而没有提交day
  • 是的,你是对的!我从以下答案之一中找到了解决方案。我应该将“禁用”替换为“只读”。

标签: php html laravel


【解决方案1】:

改变

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

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

禁用的输入不会与表单请求一起提交。如果您不希望用户能够更改值,则必须使用不同的技术。可以隐藏吗?

【讨论】:

  • 感谢您的解决方案。它无法隐藏,因为我需要显示日期,但我不希望用户对此进行任何更改。终于找到解决办法了,我必须把“disabled”换成“readonly”。
【解决方案2】:

禁用输入不会提交。如果你想让它不能被用户编辑,你需要使用 readonly

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

【讨论】:

    【解决方案3】:

    试试这个:

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

    【讨论】:

    • 感谢您的回答。我在输入(html)处将“禁用”替换为“只读”。成功了。
    【解决方案4】:

    count()函数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; 
     }
    

    【讨论】:

    • 感谢您的回答。我在输入(html)处将“禁用”替换为“只读”。成功了。
    猜你喜欢
    • 2021-05-25
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    • 2011-10-14
    • 2018-09-22
    • 1970-01-01
    • 2012-04-28
    相关资源
    最近更新 更多