亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 mysql 和 php 搜索和過濾數據

使用 mysql 和 php 搜索和過濾數據

PHP
搖曳的薔薇 2023-03-26 16:04:25
我剛剛開始學習 php 和 mysql,并且正在使用 php 和 mysql 創建一個項目。我在搜索和過濾數據庫中的數據時卡住了。搜索基本上是根據用戶輸入組合搜索和過濾數據。這是我的代碼:public function filterSearch(Request $request){    $new  =  $request->get('new');    $used  =  $request->get('used');    $registered  =  $request->get('registered');    $make = $request->get('make');    $model = $request->get('model');    $price = $request->get('price');    $city =  $request->get('city');    $registration = $request->get('firstRegistration');    $query =  DB::select("SELECT  * FROM ads WHERE vehicleCond LIKE '".$new."' OR vehicleCond LIKE '".$used."' OR vehicleCond LIKE '".$registered."' ");    $decode =  json_decode(json_encode($query),true);    $finalArr = array();    for($i=0; $i<count($decode); $i++){        if($make || $model || $registration){            if(($decode[$i]['make'] == $make) || ($decode[$i]['model'] == $model) ||  ($decode[$i]['registration'] == $registration)){                array_push($finalArr,$decode[$i]);            }        }else{            array_push($finalArr,$decode[$i]);        }       }    return response()->json(['success'=>$finalArr], 200);   }結果不正確...對于單一選擇,它工作正常。當我使用組合時,結果不正確。
查看完整描述

4 回答

?
守候你守候我

TA貢獻1802條經驗 獲得超10個贊

我假設你需要你的查詢/過濾器是動態的。


您的 html 腳本可以遵循以下模式/格式:


<input type="checkbox" name="filter1" value="new">

<input type="checkbox" name="filter1" value="used">

<input type="checkbox" name="filter1" value="pre-registered">


<select name="filter2" id="">...</select>

<select name="filter3" id="">...</select>

在 Php 文件中,您可以使用一些條件來附加查詢條件/過濾器:


$criteria = "";

if($request->get('filter1'))

{

    $criteria .= " AND `filter1` = '".addslashes($request->get('filter1'))."'";

}


if($request->get('filter2'))

{

    $criteria .= " AND `filter2` = '".addslashes($request->get('filter2'))."'";

}


//and so on...


//output

$query =  DB::select("SELECT * FROM your_table WHERE 1 = 1 {$criteria}");

筆記:


您可能需要謹慎地形成$criteria,因為它可能仍然有機會使用DB::select方法進行 Sql 注入,但我相信您可以使用相同的邏輯來適應使用 Laravel Eloquent 方法。


查看完整回答
反對 回復 2023-03-26
?
陪伴而非守候

TA貢獻1757條經驗 獲得超8個贊

我會改變這個:


$new  =  $request->get('new');

$used  =  $request->get('used');

$registered  =  $request->get('registered');

$make = $request->get('make');

$model = $request->get('model');

$price = $request->get('price');

$city =  $request->get('city');

$registration = $request->get('firstRegistration');

對此:


    $new  =  (empty($request->get('new')) ? "%" : $request->get('new');

    $used  =  (empty($request->get('used')) ? "%" : $request->get('used');

    $registered  =  (empty($request->get('registered')) ? "%" : $request->get('registered');

    $make = (empty($request->get('make')) ? "%" : $request->get('make');

    $model = (empty($request->get('model')) ? "%" : $request->get('model');

    $price = (empty($request->get('price')) ? "%" : $request->get('price');

    $city =  (empty($request->get('city')) ? "%" : $request->get('city');

    $registration = (empty($request->get('firstRegistration')) ? "%" : $request->get('firstRegistration');



查看完整回答
反對 回復 2023-03-26
?
絕地無雙

TA貢獻1946條經驗 獲得超4個贊

這是您的問題的解決方案



? ? public function filterSearch(Request $request){

? ? ? ? $make = $request->get('make');

? ? ? ? $model = $request->get('model');

? ? ? ? $price = $request->get('price');

? ? ? ? $city =? $request->get('city');

? ? ? ? $registration = $request->get('firstRegistration');

? ? ? ? $searchFields = [

? ? ? ? ? ? 'new',

? ? ? ? ? ? 'used',

? ? ? ? ? ? 'registered'

? ? ? ? ];


? ? ? ? $query =? DB::table('ads')->where(function ($query) use ($searchFields, $request) {

? ? ? ? ? ? ? ? collect($searchFields)->each(function($field) use($likeCriteria, $query) {

? ? ? ? ? ? ? ? ? ? $likeCriteria = $request->get($field);

? ? ? ? ? ? ? ? ? ? if ($likeCriteria === '') {

? ? ? ? ? ? ? ? ? ? ? ? $likeCriteria = '%';

? ? ? ? ? ? ? ? ? ? }


? ? ? ? ? ? ? ? ? ? $query->orWhere($field, 'like', '%' . $likeCriteria . '%');

? ? ? ? ? ? ? ? });

? ? ? ? ? ? })->get();


? ? ? ? $decode =? json_decode(json_encode($query),true);

? ? ? ? $finalArr = array();

? ? ? ? for($i=0; $i<count($decode); $i++){

? ? ? ? ? ? if($make || $model || $registration){

? ? ? ? ? ? ? ? if(($decode[$i]['make'] == $make) || ($decode[$i]['model'] == $model) ||? ($decode[$i]['registration'] == $registration)){

? ? ? ? ? ? ? ? ? ? array_push($finalArr,$decode[$i]);

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }else{

? ? ? ? ? ? ? ? array_push($finalArr,$decode[$i]);

? ? ? ? ? ? }? ?

? ? ? ? }

? ? ? ? return response()->json(['success'=>$finalArr], 200);

? ? }


首先,將要搜索的所有變量移動到數組中,$searchFields這樣我們就可以避免代碼重復并使用干凈的代碼。

更改您的數據庫查詢,以便我們可以使用帶有查詢功能的table方法where來移動其中的所有邏輯,并避免 SQL 注入。


查看完整回答
反對 回復 2023-03-26
?
繁星點點滴滴

TA貢獻1803條經驗 獲得超3個贊

我會嘗試將查詢存儲到一個變量,然后使用三元條件或三元條件添加選擇(如果 isset 或不為空)


$query=""SELECT  * FROM ads WHERE 1=1 ";

$query.=(isset($new) && $new!='' ? " OR vehicleCond LIKE '%" . $new . "%'" : "");

$query.=(isset($used) && $used!='' ? " OR vehicleCond LIKE '%" . $used. "%'" : "");

$query.=(isset($registered) && $registered!='' ? " OR vehicleCond LIKE '%" . $registered. "%'" : "");

//and so on depends on your selection variables

//after that

$query =  DB::select($query);

干杯


查看完整回答
反對 回復 2023-03-26
  • 4 回答
  • 0 關注
  • 147 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號