如何在按钮单击表中增加laravel

时间:2019-02-22 05:37:04

标签: php laravel

我有 Home.blade.php ,如果我单击vote button,它将在候选人表中增加计数。

home.blade.php

@foreach ($file as $show)
    <div class="col-md-3" style="margin-bottom: 20px;">
       <div class="card">
          <img src="{{$show->image}}"  style="width:100%">
          <div class="card-body">
             <h5 class="title">President</h5>
             <p class="card-text">Name : {{$show->name}}</p>
             <a href="return Homecontroller@Count"> <button>VOTE</button> </a>
          </div>
       </div>
    </div>
@endforeach

家庭控制器

public function Count(){
   DB::table('candidate')->increment('count');
   return view('/home')->with('success', 'voted');
}

路线

Route::get('/home','Homecontroller@Count');

请帮助我增加计数,如果没有,此方法是否有其他方法可以做到这一点。

4 个答案:

答案 0 :(得分:0)

确保迁移中的列数是整数类型 并且:

您编写的方式有误

    <a href="return Homecontroller@Count"> <button>VOTE</button> </a>

将其更改为

<a href="{{action(Homecontroller@Count)}}"> <button>VOTE</button> </a>

答案 1 :(得分:0)

是的,有更好的方法。

将此添加到您的web.php

Route::put('/votesUp/{vote}', 'HomeController@upVote')->name('votes.upVote');
Route::put('/votesDown/{vote}', 'HomeController@downVote')->name('votes.downVote');

在您的视图列表中,即index.blade.php添加这两个按钮

  

建筑商的方式

 @foreach($candidates as $item)
<tr>
<td>{{ $loop->iteration }}</td>
<td>{!! $item->name !!}</td>

<td>{!! Form::model($item, ['method' => 'PUT', 'route' => ['votes.upVote',  $item->id ] ,'enctype'=>'multipart/form-data' ]) !!}
{!! Form::submit( 'Up Vote', ['class' => '', 'name' => 'submitbutton', 'value' => 'upvote'])!!}
{!! Form::close() !!}</td>

<td>{!! Form::model($item, ['method' => 'PUT', 'route' => ['votes.downVote',  $item->id ] ,'enctype'=>'multipart/form-data' ]) !!}
{!! Form::submit( 'Down Vote', ['class' => '', 'name' => 'submitbutton', 'value' => 'upvote'])!!}
{!! Form::close() !!}</td>
</tr>    
@endforeach
  

HTML方式

@foreach($candidates as $item)
<tr>
<td>{{ $loop->iteration }}</td>
<td>{!! $item->name !!}</td>

<td>
    <form method="post" action="{{ route('votes.upVote', $item->id) }}">
        @method('PUT')
        @csrf
        <input class="" name="submitbutton" value="Up Vote" type="submit">
      </form>

        <form method="post" action="{{ route('votes.downVote', $item->id) }}">
        @method('PUT')
        @csrf
        <input class="" name="submitbutton" value="Down Vote" type="submit">
      </form>
</td>
</tr>    
@endforeach

我认为您的模型为Candidate,因此将其添加到HomeController

  

ELOQUENT方式

public function upVote(Request $request, $id)
    {
        Candidate::find($id)->increment('votes_count', 1);
        return redirect()->back();
    }

    public function downVote(Request $request, $id)
    {
        Candidate::find($id)->decrement('votes_count', 1);
        return redirect()->back();
    }
  

数据库外观方式

public function upVote(Request $request, $id)
    {
        \DB::table('candidates')->where('id','=',1)->increment('votes_count', 1);
        return redirect()->back();
    }

    public function downVote(Request $request, $id)
    {
        \DB::table('candidates')->where('id','=',1)->decrement('votes_count', 1);
        return redirect()->back();
    }

解释:

当您单击votes_count表中candidates提交的upvote按钮时, 增加 1

当您点击votes_count表中candidates提交的下注按钮时,将减少 1

  

编辑未定义的变量候选

找到这行

@foreach($candidates as $item)

并替换为

@foreach ($file as $item)

修复

  

App \ Http \ Controllers \ HomeController类不存在

来自

Route::put('/votesUp/{vote}', 'HomeController@upVote')->name('votes.upVote');
Route::put('/votesDown/{vote}', 'HomeController@downVote')->name('votes.downVote');

TO

Route::put('/votesUp/{vote}', 'Homecontroller@upVote')->name('votes.upVote');
Route::put('/votesDown/{vote}', 'Homecontroller@downVote')->name('votes.downVote');

您的控制器类

  

首页 c ontroller

但是我写错了

  

首页 C ontroller

答案 2 :(得分:0)

投票按钮应如下所示:

<a href="{{ action('Homecontroller@Count' }}"><button>VOTE</button></a>

答案 3 :(得分:0)

借助上面@manojkiran-a很好地回答的Upvote和Downvote之类的功能,我还将添加节流功能。现在,很容易创建一个即使在使用csrf令牌时也可以发送upvote请求的漫游器。

我要添加:

'middleware' => 'throttle:5'

每个IP地址每分钟仅允许5个请求。不能完全阻止它,但要使其变得更困难。

Route::put('/votesUp/{vote}', 'Homecontroller@upVote')->middleware('throttle:5')->name('votes.upVote');
Route::put('/votesDown/{vote}', 'Homecontroller@downVote')->middleware('throttle:5')->name('votes.downVote');