如何在不刷新页面 LARAVEL PHP SQL 的情况下插入复选框表?

Posted

技术标签:

【中文标题】如何在不刷新页面 LARAVEL PHP SQL 的情况下插入复选框表?【英文标题】:How to insert checkbox table without refreshing the page LARAVEL PHP SQL? 【发布时间】:2017-07-20 00:22:45 【问题描述】:

我正在创建表格,这样一个人(比如说老师)可以通过选择复选框元素('yes'或'no')来检查出勤率。并且页面不应该刷新,必须有保留复选框(“是”或“否”,其中一个在框中为空或打勾)所以我(逻辑上)编写了代码,但它不起作用。你们能帮我解决这个问题吗 提前致谢

这是我的visit.blade.php

>@extends('header')
>@section('content')
>  ...
> <div>
>   ...
>  <tbody class="compact ">
>                  @forelse ($group->students as $key => $student)
>                      <tr class="center aligned">
>                          <td> ++$key </td>
>                          <td class="left aligned"> $student->fio </td>
>                          @for($k = 1; $k<=$group->number_of_lessons; $k++)
>                              <td>
>                                  @if($student->has)
>                                      <div class="ui checkbox visit"><input type="checkbox" name="example" data-group-id="
> $group->id " data-student-id=" $student->id "
> data-lesson-id="$lesson->id">
>                                      </div>
>                                  @else
>                                      <div class="ui checkbox visit"><input type="checkbox" name="example" data-group-id="
> $group->id " data-student-id=" $student->id "
> data-lesson-id="$lesson->id">
>                                      </div>
>                                  @endif
> 
> 
>                              </td>
>                          @endfor
>                      </tr>
>                  @empty
>                      <tr class="center aligned">
>                          <td></td>
>                      </tr>
>                  @endforelse
>                  </tbody>
>     </div>
> @endsection

这是我的 app.js

> $('.button.add.lesson.attandence').click(function()
>         var lesson_id = $(this).data('lesson-id');
>         var student_id = $(this).data('student-id');
>         var group_id = $(this).data('group-id');
>         var $addButton =($this);
>         $.ajax(
>             url:laroute.route('group.visits',id:group_id),
>             data:'student-id=' + student_id,
>             data:'lesson-id=' + lesson_id,
>             success:function()
>                 $addButton.parent().parent().add();
>                 alertify.success('Attendance checked');
>             
>         );
> 
>     );

这是我的 Controller.php

>   public function visits($id)
>         $group = Group::findOrFail($id);
>         foreach(Student::all() as $student) 
>             $data['students'][$student->id] = $student->fio;
>         
>           return view('groups.visit', compact('group', 'data'));
> 
>     

这是我的 Routes.php

Route::get('group/id/visits', ['as' => 'group.visits', 'uses' => 'GroupController@visits']);
Route::post('group/id/visits', ['as' => 'group.visits', 'uses' => 'GroupController@visits']);

这里是tableview的链接TABLE IMAGE https://scontent-frt3-1.xx.fbcdn.net/v/t31.0-8/fr/cp0/e15/q65/16992175_779940032172228_6157498598844322627_o.jpg?efg=eyJpIjoidCJ9&oh=5d746dd6dd90e12ed5e379b9ad02f0b4&oe=5935D05C

【问题讨论】:

【参考方案1】:

一个多月前我问了这个问题。自己试过,最后我设法做到了。所以我发布了答案。也许将来有人会需要这个。 我有访问表。所以我在 Controller.php 中添加了更多行

> public function addStudent($id, Request $request)
>        $group = Group::findOrFail($id);
>         $group->students()->sync([$request->student_id],$detaching = false);
>             $lessons = Lesson::where('group_id', $id)->get();
> 
>             foreach ($lessons as $k => $lesson) 
>                 $visit = new Visit();
>                 $visit->group_id = $id;
>                 $visit->lesson_id = $lesson->id;
>                 $visit->student_id = $request->student_id;
>                 $visit->has = false;
>                 $visit->save();
>              
> 
>         return back();
>     

然后我在 visit.blade.php 中删除了旧的 @if@andif 然后我添加了这个

> @foreach($student->visits as $k => $visit)
>                              <td>
>                                  <div class="ui  $visit->has ? 'checked':''  checkbox visit">
>                                      <input type="checkbox" data-group-id=" $group->id " data-visit-id=" $visit->id " 
> $visit->has ? 'checked':'' >
>                                  </div>
>                              </td>
>                          @endforeach

最后我在 app.js

上编写了这个脚本
> $('.checkbox.visit').checkbox(
>         onChange: function() 
>             var group_id = $(this).data('group-id');
>             var visit_id = $(this).data('visit-id');
>             var has = ($(this).parent().checkbox('is checked') ? 1:0);
>             $.ajax(
>                 url: laroute.route('group.visits',  id : group_id ),
>                 data:
>                     'visit_id=' + visit_id+
>                     '&has=' + has,
>                 success: function(result) 
>                     if(result.success) 
>                         alertify.success(result.success);
>                     
>                 
>             );
>         
>     );

我做到了;)

【讨论】:

以上是关于如何在不刷新页面 LARAVEL PHP SQL 的情况下插入复选框表?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不刷新页面的情况下将数据从 Android 发送到 PHP 并显示

如何使用 php 或 javascript 在不刷新页面的情况下自动更新 JSON 数据?

如何在不提交页面的情况下刷新 PL/SQL 动态内容区域

如何在laravel中不刷新页面的情况下发送数据?

如何在不刷新整个页面的情况下更新 HTML 文档中的 php 变量?

如何在不使用 ajax 刷新的情况下在我的页面上显示我的 php 响应?