如何处理从源代码插入的错误值?

时间:2018-04-06 13:07:38

标签: php laravel

有一个页面,用户可以为每种票证类型选择他想要的数量,然后用户点击下一步,然后他会转到显示请求摘要的页面。

在用户选择数量的页面中,对于每种故障单类型,都有一个用户可以选择的最小和最大数量,例如对于故障单类型“中心工作台”,用户可以选择最大数量的故障单和门票类型“横向工作台”最多3个。

您知道这个问题的正确性:如果此选定数量页面中的用户,请将源代码中的数量更改为例如“1000000”的故障单类型“中心工作台”并单击“下一步”dd($ request-> all());所示:

array:2 [▼
  "_token" => ""
  "type" => array:2 [▼
    "center bench" => "1000000"
    "lateral bench" => "1"
  ]

因此控制器将收到“中心工作台”=> “100000”,这是不正确的。

你知道怎么办吗?

代码:

因此,在第一页中,用户可以使用此代码选择每种故障单类型的数量:

<ul>
    @foreach($tickets as $ticket)
        <li>
            <span>{{$ticket->title}}</span> 
            <form method="post" action="{{route('congress.registration', ['id' => $congress->id, 'slug' => $congress->slug])}}">

                <select name=type[{{ $ticket->title }}]>
                    <option selected>0</option>
                    ...
                </select>
            </form>
            <span>X {{$ticket->showPrice()}}</span>
        </li>
    @endforeach
    <li>
        <span>TOTAL</span>
        <span>0.00€</span>
    </li>
    <input type="submit" value="Next"/>
    </form>
</ul>

当“下一步”按钮时,我在数组中获取用户的选定数量并使用storeQuantity()方法返回注册页面:

class RegistrationController extends Controller
{
    public function storeTypes(Request $request){
         dd($request->all());
        $selectedTypes = $request->type;
        return view('congresses.registration')->with('selectedTypes', $selectedTtypes);
    }
}

1 个答案:

答案 0 :(得分:2)

您可以使用javascript验证程序(例如parsleyjs)控制用户可以在表单中放置的值,但必须始终验证后端数据,我们从来没有信任用户

这就是为什么Laravel有一个非常好的方法来验证控制器中的传入数据,你可以找到如何validate the application's incoming data

看,你可以这样做:

class RegistrationController extends Controller
{
    public function storeTypes(Request $request){
        $validatedData = $request->validate([
           'type.center bench' => 'required|max:100',
           //add there more validation rules...
        ]);

        $selectedTypes = $request->type;
        return view('congresses.registration')->with('selectedTypes', $selectedTtypes);
    }
}

如果验证失败,它将使用包含所有验证错误的MessageBag对象重定向回视图。