Torihaji's Growth Diary

Little by little, no hurry.

学習メモ 20230829

21:02 2023/08/29
今は検索フォーム、検索機能を作っている。
検索ということは、
検索フォームからキーワードをgetで受け取り、それをdbに渡して、WHERE value LIKE :value でヒットしたものを
また更に受け取ればいい。
今悩んでいるのはどんなことだ。
検索をかけるテーブルをどうしようかに悩んでいる。
一応、検索するワードのカテゴリは、投稿のタイトル、ユーザ名の2つ。
まず投稿のタイトルだけで検索をかけてみよう.
なので検索をかけるのはarticleテーブル
 
やはり、できたな。簡単だ。
まずは1つから。
ただ、おかしい。検索フォームが消えてしまった。
なぜだ。
layout.phpにおいて 検索フォームを表示する条件がpost/list.phpのみだったから
これに search.php分も追加すればよい。
だめだった。検索ワードをurlの後ろに?でつけているからヒットしない。
 
/pattern/のように必ず正規表現を//で囲むこと。
そうすればpreg_match("/pattern/", 検索対象)
でヒットすればtrue, falseが出力される。
 
preg_match("/\/test\/example.*/", $_SERVER['PATH_INFO'])
で$_SERVER['PATH_INFO']が/test/exampleだったらtrue、みたいな。
 
---------------------------------------------------------------------
検索フォームにおいて、何も入力せずに検索をしたらそのまま全投稿一覧が表示されるようにしたい。
そもそも何も入力されていない時にDBに対して 全検索をかける風にするには。
 
現状、WHERE value LIKE :value で行っているが、部分一致で検索をしているため
実際には少し変換して
WHERE value LIKE %value% という形で DBに検索をかけている。
 
########################################################
//空白のままであれば、NULLで検索をかける
if ( empty($this->request->getGet('keyword'))){
 
$keyword = NULL;
}else{//入力されている場合
 
$keyword = $this->request->getGet('keyword');
}
//部分一致検索をするため、$keywordを%で囲む
$partial_keyword = "%{$keyword}%";
######################################################
これでたとえ、検索フォームに何も入力しなくても投稿全件が出力される。
 
※前回の反省
前まで 学習日記 OO日目とかやっていたが、毎回、今何日か忘れて
それを調べるのが面倒になって、やめていた。
あと、どうしても人に伝えようと、文を加工しすぎて
面倒になって、やめていた。
しかし、この学習の際に書きなぐっているメモであれば、
難なく書けるので、これを発信していこうと思う。