我不确定我是否简要解释了问题是什么。 我有一个用户投票表格,用户通过他的名字,姓氏,母亲'姓氏和身份证。
我还有一个表users
,它存储了所有这些数据。昨天我发现了一个错误,或者我误解了laravel验证是如何工作的,因为它每次发现表中存在的所有数据时都会通过提交。
这是一张包含两条记录的表格。
示例
我对验证的期望是检查ID = 98111091239 name = Andrzej surname = Pianowski和mother surname = Mila,并且只有在一切正确且存在于一行中之后才能进行投票。
相反,我可以从第一行传递ID,其他东西从第二行传递,它也将允许用户投票。 这是一个错误,laravel工作方式或什么? 我真的很期待任何提示,帮助,消化。
此处的验证规则是
/*This validates whether all data is correct */
$validator = Validator::make($request->all(),[
//check whether such pesel exists in votes and in voters
'pesel' =>'required|exists:wyborca|max:11|min:11',
'imie' =>'required|exists:wyborca|max:64|min:2',
'nazwisko' => 'required|exists:wyborca|max:128|min:2',
'nazwisko_matki' => 'required|exists:wyborca|max:128|min:2'
]);
if($validator->fails())
{
return back()
->with('errors','Wprowadzono nieprawidłowe dane')
->withInput();
}
答案 0 :(得分:1)
验证器似乎正在传递,因为这些值可能存在于多个记录中而不仅仅是单个记录中。
一种解决方案是验证以确保请求中存在所有字段,然后执行简单的Eloquent查询以检查记录是否存在:
$user = App\User::where('id', $request->id)
->where('name', $request->name)
->where('surname', $request->surname)
->where('mother', $request->mother)
->exists(); //true or false
if($user){
//vote
}
return response()->json(['error' => 'user not found'], 404);
如果确实存在,则投票否则返回错误。