首页 > 解决方案 > 如何制作有效的搜索表单 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 只靴子出现

标签: phphtmllaravelsearch

解决方案


有很多不同的方法可以处理诸如搜索之类的事情……从简单到非常复杂,但一种基本方法是在标题和描述字段中搜索“引导”等关键字。

您需要添加一些东西……首先,添加一条新路由来处理搜索请求:

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>

有了这个基础,您就可以真正疯狂地添加过滤选项、排序、排名等等。希望这可以帮助您前进!


推荐阅读