2017-05-10 51 views
0

私のタイトルのように、検索バーで1または複数の単語を検索したいと言っています。 $ searchArray [0]、$ searchArray [1]、$($ searchArray [1]、$ searchArray [1])を実行すると、私はそれを行うことができます。 searchArray [2]が定義されています。問題は私が3単語よりもlesを検索できないことです。あなたたちは私が最初にそれは素晴らしいことだ3単語の組み合わせを検索することによって、それがさらに良く作ることができる方法を知っていれば検索バーで複数の単語を検索したい

if(isset($_GET['search']) AND !empty($_GET['search']) AND $_GET['search'] != ' '){ 
$search = htmlspecialchars($_GET['search']); 
$searchArray = explode(' ',$search); 
var_dump($searchArray); 

$totalVideosReq = $stdb->query('SELECT id FROM videos WHERE title LIKE "%'.$search.'%" OR title LIKE "%'.$searchArray[0].'%" OR title LIKE "%'.$searchArray[1].'%"'); 
$totalVideos = $totalVideosReq->rowcount(); 
$totalPages = ceil($totalVideos/$videosPerPage); 
$videos = $stdb->query('SELECT id, title, videoTime FROM videos WHERE title LIKE "%'.$search.'%" OR title LIKE "%'.$searchArray[0].'%" OR title LIKE "%'.$searchArray[1].'%" ORDER BY id DESC limit '.$start.','.$videosPerPage); 



$currentPage = 1; 
if(isset($_GET['page']) AND !empty($_GET['page']) AND $_GET['page'] > 0 AND $_GET['page'] <= $totalPages){ 
$_GET['page'] = intval($_GET['page']); 
$currentPage = $_GET['page']; 
}else{ 
    $currentPage = 1; 
}} 

:ここに私のコードです。前もって感謝します !

+0

、以下のコードを試してみてください、これはSQLインジェクションに開いています。 (htmlspecialcharsはXSSの注射を妨げる可能性がありますが、SQLインジェクションには影響しません)。 – chris85

+0

私はそれを理解したと思います!あなたは、mysql_real_escape_stringを使う必要がありますが、htmlspecialcharも必要ですか? –

+0

mysql_ *を使用していますか?パラメータ化されたクエリは、SQLインジェクションから身を守る最善の方法です。変数はクエリには含まれません。ドライバはエスケープして引用符で囲みます。 – chris85

答えて

0

これは、あなたが代わりにハードそれを符号化する、動的にクエリを生成するためにimplode()を使用することができますトリック

$query = 'SELECT id FROM videos WHERE title LIKE "%'.$search.'%"' 
foreach ($searchArray as $s) { 
    $query .= ' OR title LIKE "%'.$s.'%"'; 
} 
$totalVideosReq = $stdb->query($query); 
0

を行う可能性があります。

$totalVideosReq = $stdb->query('SELECT id FROM videos WHERE title LIKE "%'.$search.'%" OR title LIKE "%'.implode("\" OR title LIKE \"%", $searchArray).'%"'); 

これは、途中でSQLインジェクションに脆弱です。あなたはそれを防ぐ必要があります。

+0

あなたの答えをありがとう、それは素晴らしい仕事!私はSQLインジェクションから私のコードを証券化する方法を知っていますか? –

+0

準備されたステートメントとユーザー入力のサニタイズは、インターネット上の多くのガイドを提供します(SO上でも)。 – Enstage

0

もパラメータ化クエリを使用して、動的にクエリを構築

if(count($searchArray) > 0) { 
    $query = 'SELECT id FROM videos WHERE '; 
    $cond = array(); 
    foreach ($searchArray as $s) { 
     $cond[] = ' title LIKE "%'.$s.'%"'; 
    } 
    $cond = implode(' OR ', $cond); 

    //this is your query to get total videos 
    $totalVideosReq = $stdb->query($query.$cond); 

    //this is your query to fetch videos 
    $videos = $stdb->query($query.$cond.' ORDER BY id DESC limit '.$start.','.$videosPerPage); 
} 
関連する問題