使用 Laravel Eloquent 查询数据库表并清理用户输入[已关闭]

问题描述 投票:0回答:1

我做了一个搜索引擎,它有两个输入,一个用于你想要搜索的内容,一个用于城市和州,这是一个很棒的小项目。

我正在尝试使用

str_replace()
来表示城市和州。但是,用户可以输入城市并说明是否使用逗号或不使用逗号,或者使用空格或双倍空格,它将找到结果(因此我使用
str_replace
的原因),但只有
$strr
变量有效,其他变量不起作用。

这就是我所拥有的

$userinput = $request->input('$what');
$city&state = $request->input('$where');

$str = trim(preg_replace('/\s+/', ' ', $userinput));
$sty = trim(preg_replace('/\s+/', ' ', $userinput));
   
$strr = str_replace(", ", ",", $city&state);
$strrr = str_replace(", ", ",", $city&state);
$strrrr = str_replace(" ,", " ," ," ,", $city&state);
$stq = str_replace(",", " ", $city&state);   
$stw = str_replace(",", " ", $city&state);

$pro=User::where('tags', 'Like', '%' . $str . '%')
        ->where(function ($query) use ($strrr, $strr, $strrrr, $stq, $stw) {
            $query->where('cityandstate', 'LIKE', '%' . $strr . '%')
                ->orWhere('cityandstate', 'LIKE', '%' . $strrr . '%')
                ->orWhere('cityandstate', 'LIKE', '%' . $strrrr 

.'%') ->orWhere('cityandstate', 'LIKE', '%' . $stq . '%') ->orWhere('cityandstate', 'LIKE', '%' . $stw . '%');

        })
        ->orWhere('company_name', 'Like', '%' . $str . '%')
        ->where(function ($query) use ($strrr, $strr, $strrrr) {
            $query->orWhere('cityandstate', 'LIKE', '%'. $strr .'%')
                ->orWhere('cityandstate', 'LIKE', '%' . $strrr . '%')
                ->orWhere('cityandstate', 'LIKE', '%' . $strrrr . '%');
        })
        ->inRandomOrder()
        ->paginate(20);
php laravel eloquent sanitization
1个回答
1
投票

我建议不要使用多个

str_replace
来清理输入,作为一般示例,下面的代码将删除任何前导/尾随或双空格和逗号,并替换为单个空格。

function clean_input($str) {
     return preg_replace('/[ ,]+/', ' ', trim($str));
}

$searches = ['City, State', 'City State', 'City , State', 'City  State', ' City  state '];

foreach ($searches as $search) {
    print cleanInput($search) . PHP_EOL;
}

// Prints.

City State
City State
City State
City State
City state
© www.soinside.com 2019 - 2024. All rights reserved.