【问题标题】:How to handle multiple inputs in a single form in laravel?如何在 laravel 中以单一形式处理多个输入?
【发布时间】:2019-06-20 18:54:26
【问题描述】:

我有一个表单,要求用户标记他们的出勤情况,我发送Carbon::now() 作为默认和隐藏输入,每当用户点击按钮时,它应该存储在数据库中,但问题是我有四个像这样的字段,每当我点击提交按钮时,它都会存储所有字段的值。我是这个东西的新手,请帮助我。 我也包括代码。

查看:

<div class="card" style="max-width: 600px; margin:auto; margin-bottom:50px;margin-top:40px;">
    <div class="card-header" style="text-align:center">
        Today: @php $today = \Carbon\Carbon::now()->format('d-m-Y'); @endphp &nbsp; {{$today}}
    </div>
    <form action="{{ route('timesheet.store') }}" method="POST">
        @csrf
    <div class="card-body">
        @php
            $now = \carbon\Carbon::now();
        @endphp
        <ul class="list-group">
            <li class="list-group-item">
                <label for="in_time">Day start</label>
                <input name="in_time" type="datetime" style="display:none" value="{{$now}}">
                <span style="float:right"><button type="submit" class="btn btn-success btn-sm">Mark</button></span>
            </li>
            <li class="list-group-item">
                <label for="break_out">Break-out</label>
                <input name="break_out" type="datetime" style="display:none" value="{{$now}}">
                <span style="float:right"><button type="submit" class="btn btn-success btn-sm">Mark</button></span>
            </li>
            <li class="list-group-item">
                <label for="break_in">Break-in</label>
                <input name="break_in" type="datetime" style="display:none" value="{{$now}}">
                <span style="float:right"><button type="submit" class="btn btn-success btn-sm">Mark</button></span>
            </li>
            <li class="list-group-item">
                <label for="out_time">Day end</label>
                <input name="out_time" type="datetime" style="display:none" value="{{$now}}">
                <span style="float:right"><button type="submit" class="btn btn-success btn-sm">Mark</button></span>
            </li>
        </ul>
    </div>
    </form>
</div>

控制器:

public function store(Request $request)
{
    Timesheet::create([
        'in_time' => request('in_time'),
        'out_time' => request('out_time'),
        'break_out' => request('break_out'),
        'break_in' => request('break_in'),
        'user_id' => Auth::user()->id,
    ]);


    return redirect()->route('timesheet.create')
        ->with('success', 'Attendance marked successfully.');
}

我要做的是:

  1. 当用户点击“标记”按钮时,应该将该特定字段的值和其余字段与 null 一起存储,因为所有列都可以为 null。
  2. 一旦用户点击按钮并且值成功存储在 DB 中,按钮应替换为刻度标记按钮,并且应禁用到第二天,即午夜。

我们将不胜感激任何帮助。 抱歉,由于未使用堆栈溢出,问题格式错误。

【问题讨论】:

  • stackoverflow 并不是一个代码编写服务。你应该自己尝试一些东西,当代码不起作用时,用minimal reproducible example提问。另请查看How to Ask 部分
  • 对不起先生,下次我会保持清洁。你能帮我解决这个问题吗?
  • 我愿意,但这不是我的专业领域,所以您必须等待其他人帮助您,我不能。但是,您可以先尝试某件事,然后再提出问题,从而提高获得帮助的机会。
  • 先生,我尝试了很多时间但未能成功,因此将其作为最终选择。

标签: javascript php ajax laravel-5.7


【解决方案1】:

请试试这个,

public function store(Request $request)
{
    Timesheet::create([
        'in_time' => $request->get('in_time'),
        'out_time' => $request->get('out_time'),
        'break_out' => $request->get('break_out'),
        'break_in' => $request->get('break_in'),
        'user_id' => \Auth::user()->id,
    ]);


    return redirect()->route('timesheet.create')
        ->with('success', 'Attendance marked successfully.');
}

【讨论】:

    【解决方案2】:

    这听起来像是 AJAX 的工作。

    第一步:

    为所有按钮添加通用类

    // new time-btn class
    <span style="float:right"><button type="submit" class="btn btn-success btn-sm 
    btn time-btn">Mark</button></span>
    

    第 2 步:

    获取数据并使用 AJAX 发送(使用 jquery):

    $(document).on('click', '.time-btn', function(e) {
       e.preventDefault();
    
       // get value of first input before the button
       var time = $(this).prev('input').val();
       // get input name
       var name = $(this).prev('input').attr('name')
    
       // validate time if necessary
    
         $.ajax({
            url: '/time/store', // insert route url here
            type: 'POST',
            data: {time: time, name: name},
            success: function( response ) {
                response = JSON.parse( response );
               // add tick mark to button here
            },
            error: function (xhr, status, error) {
                console.log( xhr.responseText );
            }
         });
      });
    

    第 3 步:

    更新控制器

    public function store(Request $request)
    {   
    
    Timesheet::create([
        'in_time' => request('name') == 'in_time' ? request('time') : null,
        'out_time' => request('name') == 'out_time' ? request('time') : null,
        // do the same for tother
        ...
        'user_id' => Auth::user()->id,
    ]);
    
    
    return redirect()->route('timesheet.create')
        ->with('success', 'Attendance marked successfully.');
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-14
      • 2016-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      相关资源
      最近更新 更多