반응형

 

 

검색은 참 어려운 부분이다. 해킹도 걱정해야하고.

 

이번엔 그냥 단순히 쿼리에 추가하는 정도만 작업해보자. 제목과 내용에서 검색하도록 할것이다. index.php를 고쳐보자.

 

/index.php

<?php
include $_SERVER["DOCUMENT_ROOT"]."/inc/header.php";

$search_keyword = $_GET['search_keyword'];

if($search_keyword){
$search_where = " and (subject like '%".$search_keyword."%' or content like '%".$search_keyword."%')";
}

$sql = "select * from board where 1=1";
$sql .= " and status=1";
$sql .= $search_where;
$order = " order by bid desc";
$query = $sql.$order;
echo "query=>".$query."<br>";
$result = $mysqli->query($query) or die("query error => ".$mysqli->error);
while($rs = $result->fetch_object()){
    $rsc[]=$rs;
}

?>

<table class="table">
<thead>
<tr>
<th scope="col">번호</th>
<th scope="col">글쓴이</th>
<th scope="col">제목</th>
<th scope="col">등록일</th>
</tr>
</thead>
<tbody>
<?php 
$i=1;
foreach($rsc as $r){
?>
<tr>
<th scope="row"><?php echo $i++;?></th>
<td><?php echo $r->userid?></td>
<td><a href="/view.php?bid=<?php echo $r->bid;?>"><?php echo $r->subject?></a></td>
<td><?php echo $r->regdate?></td>
</tr>
<?php }?>
</tbody>
</table>
<form method="get" action="<?php echo $_SERVER["PHP_SELF"]?>">
<div class="input-group mb-12" style="margin:auto;width:50%;">
<input type="text" class="form-control" name="search_keyword" id="search_keyword" placeholder="제목과 내용에서 검색합니다." value="<?php echo $search_keyword;?>" aria-label="Recipient's username" aria-describedby="button-addon2">
<button class="btn btn-outline-secondary" type="button" id="button-addon2">검색</button>
</div>
</form>

<p style="text-align:right;">

<?php
if($_SESSION['UID']){
?>
<a href="write.php"><button type="button" class="btn btn-primary">등록</button><a>
<a href="/member/logout.php"><button type="button" class="btn btn-primary">로그아웃</button><a>
<?php
}else{
?>
<a href="/member/login.php"><button type="button" class="btn btn-primary">로그인</button><a>
<a href="/member/signup.php"><button type="button" class="btn btn-primary">회원가입</button><a>
<?php
}
?>
</p>
<?php
include $_SERVER["DOCUMENT_ROOT"]."/inc/footer.php";
?>

 

이렇게 수정 후 검색란에 검색어를 넣고 검색하면 제목이나 내용에 해당 검색어가 포함된 게시물만 검색된다. 위 소스에서 echo로 수정된 쿼리를 찍어보았다.

 

select * from board where 1=1 and status=1 and (subject like '%안녕%' or content like '%안녕%') order by bid desc

 

이렇게 나온다. 해당 부분은 쿼리만 확인하고 바로 주석처리해준다.

 

여기서 한가지만 더 해보자. 보통 검색어가 리스트에 표시되면 해당 검색어에 색깔을 줘서 구분하는 경우가 있다. 그걸 해보자.

 

/index.php

<?php
include $_SERVER["DOCUMENT_ROOT"]."/inc/header.php";

$search_keyword = $_GET['search_keyword'];

if($search_keyword){
    $search_where = " and (subject like '%".$search_keyword."%' or content like '%".$search_keyword."%')";
}

$sql = "select * from board where 1=1";
$sql .= " and status=1";
$sql .= $search_where;
$order = " order by bid desc";
$query = $sql.$order;
//echo "query=>".$query."<br>";
$result = $mysqli->query($query) or die("query error => ".$mysqli->error);
while($rs = $result->fetch_object()){
    $rsc[]=$rs;
}

?>

<table class="table">
<thead>
<tr>
    <th scope="col">번호</th>
    <th scope="col">글쓴이</th>
    <th scope="col">제목</th>
    <th scope="col">등록일</th>
</tr>
</thead>
<tbody>
<?php
$i=1;
foreach($rsc as $r){
    //검색어만 하이라이트 해준다.
    $subject = str_replace($search_keyword,"<span style='color:red;'>".$search_keyword."</span>",$r->subject);
?>

<tr>
    <th scope="row"><?php echo $i++;?></th>
    <td><?php echo $r->userid?></td>
    <td><a href="/view.php?bid=<?php echo $r->bid;?>"><?php echo $subject?></a></td>
    <td><?php echo $r->regdate?></td>
</tr>
<?php }?>
</tbody>
</table>
<form method="get" action="<?php echo $_SERVER["PHP_SELF"]?>">
<div class="input-group mb-12" style="margin:auto;width:50%;">
<input type="text" class="form-control" name="search_keyword" id="search_keyword" placeholder="제목과 내용에서 검색합니다." value="<?php echo $search_keyword;?>" aria-label="Recipient's username" aria-describedby="button-addon2">
<button class="btn btn-outline-secondary" type="submit" id="button-addon2">검색</button>
</div>
</form>

<p style="text-align:right;">

<?php
if($_SESSION['UID']){
?>
    <a href="write.php"><button type="button" class="btn btn-primary">등록</button><a>
    <a href="/member/logout.php"><button type="button" class="btn btn-primary">로그아웃</button><a>
<?php
}else{
?>
    <a href="/member/login.php"><button type="button" class="btn btn-primary">로그인</button><a>
    <a href="/member/signup.php"><button type="button" class="btn btn-primary">회원가입</button><a>
<?php
}
?>
</p>
<?php
include $_SERVER["DOCUMENT_ROOT"]."/inc/footer.php";
?>


str_replace라는 내장 함수를 이용해서 특정 단어만 색깔을 바꿔준다.

 

 

이렇게 나온다.

반응형

+ Recent posts