首页 > 解决方案 > 从输入选定值中分离字符串

问题描述

我从选定的下拉值中有两个单独的字符串值。喜欢

<label>Book ID</label><span class="required">*</span>
<select class="js-example-basic-single form-control" name="sel_Book">
    @foreach ($books as $data)                                       
        <option value="{{ $data->BookID }}-{{ $data->BookUnitPrice }}">{{ $data->BookName }} --- {{ $data->BookUnitPrice }}</option>                                                      
    @endforeach
</select>

所以在控制器中,该值被检索为BookID-BookUnitPrice例如Eng11-500“来自sel_Bookdropdown. So I have to separate this value and set Book = Eng11 andUnitPrice = 500`。我该怎么做?

代码块

$booksout -> Distributor = $request->input('sel_Distributor');
$booksout -> Book = $request->input('sel_Book');
return response()->json($request); 
$booksout -> UnitPrice =
$booksout -> Quantity = $request->input('DistQuantity');

标签: phplaravellaravel-5

解决方案


这就是您使用 ID 的原因。

格式化您的选择,如:

<option value="{{ $data->BookID }}">
     {{ $data->BookName }} --- {{ $data->BookUnitPrice }}
</option> 

然后在您获取它们时在您的控制器中:

下面的代码假设 bookout 模型具有所有字符串/数字字段:

$book_id = $request->input('sel_Book');
$book = Book::find($book_id);
if($book) {
   $booksout->Distributor = $book->Distributor->Name;
   $booksout->book = $book->BookName ;
   $booksout->UnitPrice = $book->BookUnitPrice
   $booksout->Quantity = $request->input('DistQuantity');
}

通过这种方式,您可以使用完整的图书对象,而不必担心用户伪造了发送到您服务器的数据。如果您依赖 post/get 请求中的价格,我可以通过欺骗价格以 0 的价格购买您的书籍。

永远不要相信用户数据。始终尝试从您自己的可信数据源中收集尽可能多的输入,用户只能提供产品 ID 和数量。

另一个注意事项,考虑使用 camelCase 而不是 StudlyCase。因此,大多数程序员通常不$book->BookUnitPrice使用$book->bookUnitPriceStudlyCase 来解释类名。


推荐阅读