誰かが私に正しい方向へのプッシュを与えるのを手伝ってくれるかどうか疑問に思って、私は検索結果を表示し、ユーザーが検索したキーワードを強調表示する検索関数(phpとmysql)を構築しています。現時点では、ユーザーが入力した検索条件を取得し、データベースに対してクエリを実行します。これにより、目的の結果を得ることができます。私が抱えている問題は
$highlight = preg_replace("/".$_GET['criteria']."/", "<span class='highlight'>".$_GET['criteria']."</span>", $_row['name']);
これはフレーズのみを強調表示し、個々のキーワードは強調表示しません。したがって、たとえば、ドキュメントが「Hello world」と呼ばれ、ユーザーがこれを正確に入力した場合、問題は強調表示されませんが、ユーザーが「world hello」と入力した場合、何も強調表示されません。検索条件を取得し、explodeを使用して各単語を個別にチェックするのは良い考えだと思いましたが、これも失敗するようです。これが私のクエリと結果の表示方法です
$sql = "SELECT *
FROM uploaded_documents
WHERE dept_cat = 'procedures'
AND cat =:cat
AND keywords REGEXP :term ";
$result->execute(array(':cat' => $_GET['category'],':term' => $_GET['criteria']));
//display results
while($row = $stmt->fetch()){
$explode_criteria = explode(" ",$_GET['criteria']);
foreach($explode_criteria as $key){
$highlight = preg_replace("/".$key."/", "<span class='highlight'>".$key."</span>", $row['name']);
echo '<td><a target="_blank" href="'.$row['url'].'">'.$highlight.'</a></td>';
echo '<td>'.$row['version'].'</td>';
echo '<td>'.$row['cat'].'</td>';
echo '<td>'.$row['author'].'</td>';
echo '<td>'.$row['added'].'</td>';
echo '<td>'.$row['auth_dept'].'</td>';
echo '<td>';
}
}
長さのために、ここではコードを省略し、最小限に抑えようとしました。次の投稿に基づいて作業を行っています。
私の最初の問題は、whileループの結果を複製するforeachループだと思いますが、それを回避する方法を考えることはできません。
前もって感謝します