php - 如何制作有效的搜索表单 PHP/HTML?
问题描述
所以基本上我正在为大学做一个项目,我的项目中唯一缺少的是一个有效的搜索表单,但我不知道该怎么做。我所有的产品都被创建并植入到数据库中。
我的路线:
Route::get('/', [
'uses' => 'ProductsController@getIndex',
'as'=> 'product.index'
] //tenho de meter um . porque nao é uma diretoria global, index ta dentro
duma pasta shop
);
我的桌子:
Schema::create('products', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
$table->string("imagePath");
$table->string("title");
$table->text("description");
$table->integer("price");
});
我的表单结构:
<form action="" method="post" class="navbar-form navbar-left " role = "search">
<div class="form-group">
<input type="text" class="form-control" placeholder="Search">
</div>
<button type="submit" class="btn btn-default">Search</button>
</form>
我的产品控制器:
public function getIndex(){
$products = Products::all();
return view('shop.index', ['products' => $products]);
}
我看过很多关于如何做的教程,但我似乎无法让它过滤我拥有的那些,例如,如果我在商店里有 3 只靴子和 5 只鞋子,如果我在搜索中写“引导” ,我只想让 3 只靴子出现
解决方案
有很多不同的方法可以处理诸如搜索之类的事情……从简单到非常复杂,但一种基本方法是在标题和描述字段中搜索“引导”等关键字。
您需要添加一些东西……首先,添加一条新路由来处理搜索请求:
Route::post('/results', [
'uses' => 'ProductsController@searchProducts',
'as'=>'product.search'
]);
接下来,为您的 html 输入添加一个名称,例如“关键字”以及 CSRF 令牌字段的刀片快捷方式:
<form action="/results" method="post" class="navbar-form navbar-left " role = "search">
@csrf
<div class="form-group">
<input type="text" class="form-control" placeholder="Search" name="keyword">
</div>
<button type="submit" class="btn btn-default">Search</button>
</form>
然后向控制器添加一个函数来处理查询:
public function searchProducts(Request $request){
$results = Product::where('title', 'like', '%'.$request->search.'%')
->orWhere('description', 'like', '%'.$request->search.'%')
->orderBy('title', 'desc')
->get();
return view('search_results', ['results'=>$results, 'keyword'=>$request->keyword]);
}
最后,创建一个名为 search_results.blade.php 的新文件并将其放在您的视图目录中。这将用于向用户显示搜索结果。
<h2>Search Results for {{$keyword}}</h4>
<table>
<thead>
<tr>
<th>Product</th>
<th>Description</th>
<th>Price</td>
</tr>
</thead>
<tbody>
@forelse($results as $result)
<tr>
<td>{{$result->title}}</td>
<td>{{$result->description}}</td>
<td>{{$result->price}}</td>
</tr>
@empty
<tr>
<td colspan="3">
No Products Found
</td>
</tr>
@endforelse
</tbody>
</table>
有了这个基础,您就可以真正疯狂地添加过滤选项、排序、排名等等。希望这可以帮助您前进!
推荐阅读
- terminal - Gitlab CI 管道的输出写入哪个设备?
- algorithm - 给定相似度分数的最佳匹配项目对的算法
- php - 在 1 到 100 的范围内生成 3 个唯一的随机数
- terraform - 在 Terraform 模块定义中合并地图
- vb.net - 将 WinForms 应用程序转换为类库时,对启动对象的引用失败
- sql - SQL查询,根据另一列最高值删除重复条目
- ubuntu - 无法在 Ubuntu 中卸载量角器
- reactjs - 提交 React JS 后如何删除文本区域内的文本
- javascript - Javascript Joi 替代数组或对象数组
- nagios - Nagios 密码无效