我有 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');
请帮助我增加计数,如果没有,此方法是否有其他方法可以做到这一点。
答案 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');