검색을 하기 위한 폼을 list.php에 추가한다
<form method=get action=list.php>
</form>

여기서 액션이 list.php인 것은 검색을 하기 위해 입력된 검색어와 검색항목 등을 다시 list.php로 전해주기 위해서 이다.
list.php에서는 이렇게 검색을 실행하였을 때 전체의 글 리스트가 아닌검색된 글만을 보여주게 하겠다는 얘기

<form method=get action=list.php>
<input type=checkbox name=search_name value=1 checked> 이름에서 //체크가되면 1이라는 값이 들어가도록
<input type=checkbox name=search_memo value=1 checked> 메모에서
<input type=text size=10 name=search_word>
<input type=submit value='검색'>
</form>



2.검색의 실행
if ($search_word) { //검색어가 있을경우 검색을 실행
if (!search_name && !search_memo) {
error ('검색 항목을 선택 하세요');
}
}

name컬럼에 a라는 문자가 포함된 레코드만을 가져오려 한다면
SELECT * FROM exam_memo WHERE name LIKE '%a%'

memo컬럼에도 a라는 문자가 포함된 레코드를검색하도록 추가하려면
SELECT * FROM exam_memo WHERE name LIKE '%a%' OR memo LIKE '%a%'


$where = ""; //기본 where절
$query = "SELECT * FROM exam_memo $where ORDER BY no DESC LIMIT $start, $page";
$query = "SELECT COUNT(*) FROM exam_memo $where ";

$where에 들어가는 조건에 따라 쿼리문이 달라진다


정리해보면
$where = ""; //기본 where절
if ($search_name) { //이름에서 검색
$where .="WHERE name LIKE '%a%' ";
}
if ($search_memo) { //메모에서 검색
$where .="OR memo LIKE '%a%' ";
}
먼저 $search_name의 값만 있는 경우 결과는
WHERE name LIKE '%a%' 가 될것이다

그리고 $search_name과 $search_memo 가 모두 값을 가지고 있을 때는
WHERE name LIKE '%a%' OR memo LIKE '%a%' 가 될것이다

그런데 문제가 있다.
name에는 값이 없고, memo에만 값이 있는경우는 쿼리문법이 틀리다는 것을 알 수 있다
OR 대신에 WHERE를 넣어주어야 하는데
일단 OR 대신에 $or_where 변수를 넣어주도록 하자

$where = ""; //기본 where절
if ($search_name) { //이름에서 검색
$where .="WHERE name LIKE '%$search_word%' ";
$or_where="OR";
}
else {$or_where="WHERE";}
if ($search_memo) { //메모에서 검색
$where .="$or_where  memo LIKE '%$search_word%' ";
}



검색어강조하기
문자열을 치환하는 함수를 이용하여 (str_replace) 검색어를 강조항보자

if ($search_word) { //검색어 강조
$data[memo] = str_replace ( "$search_word", "<font color=red><b>$search_word</b></font>", $data[memo]);
$data[name] = str_replace ( "$search_word", "<font color=red><b>$search_word</b></font>", $data[name]);

+ Recent posts