如何制作一个有效的PHP / HTML搜索表单?

时间:2019-01-18 19:31:42

标签: php html laravel search

所以基本上我正在做一个大学项目,而我项目中唯一缺少的是一个有效的搜索表单,但是我不知道该怎么做。我所有的产品都被创建并植入了数据库。

我的路线:

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个鞋子,如果我写“ boot”在搜索中,我只希望3个靴子出现

3 个答案:

答案 0 :(得分:0)

有很多不同的方法来进行类似的搜索...从简单到非常复杂,但是一种基本的方法是在标题和说明字段中搜索诸如“ boot”之类的关键字。

您需要添加几件事... 首先,添加一条新路径来处理搜索请求:

Route::post('/results', [
  'uses' => 'ProductsController@searchProducts', 
  'as'=>'product.search'
]);

接下来,在您的html输入中添加一个名称,例如'keyword'以及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的新文件,并将其放在您的views目录中。这将用于向用户显示搜索结果。

<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>

有了这个基础,您真的可以疯狂并添加过滤选项,排序,排名等。希望对您有所帮助!

答案 1 :(得分:0)

您的HTML将是

<form action="{{ route('product.search') }}" method="post" class="navbar-form navbar-left " role = "search">
    @csrf
    <div class="form-group">
        <input type="text"  class="form-control" name="search" placeholder="Search">
    </div>
    <button type="submit" class="btn btn-default">Search</button>
</form>

在您的searchProduct函数中

对于类似的查询,它可以在标题中进行搜索,并且如果存在关键字,它将返回与您要搜索的标题相同的所有产品

public function searchProducts(Request $request){
    $products = Product::where('title', 'like', '%'.$request->search.'%')->get();
    return view('shop.index', ['products' => $products]);
}

获得完全相同的标题结果

public function searchProducts(Request $request){
    $products = Product::where('title',$request->search)->get();
    return view('shop.index', ['products' => $products]);
}

答案 2 :(得分:-1)

你可以做到

html

       <form action="/search" method='post' class="navbar-form navbar-left " role = "search">
                <div class="form-group">
                    <input type="text"  class="form-control" placeholder="Search" name="search">
                </div>
                <button type="submit" class="btn btn-default">Search</button>
            </form>


    PHP

    public function search(Request $request)
    {
        $products = Product::where('title', 'LIKE', '%'.request->search.'%')->get();

        return view('search', ['products' => $products]);
    }

仅更改要返回的视图,也可以将其创建到route / web.php中。