웹개발(PHP-Mysql)

[웹 개발] 검색 및 정렬 기능 구현

무너박사 2024. 7. 16. 09:55

 

저번시간에는 CRUD 페이지 구현을 진행하였습니다.

https://jamesbexter.tistory.com/entry/%EC%9B%B9-%EA%B0%9C%EB%B0%9C-CRUD%EC%83%9D%EC%84%B1%EC%9D%BD%EA%B8%B0%EC%88%98%EC%A0%95%EC%82%AD%EC%A0%9C-%ED%8E%98%EC%9D%B4%EC%A7%80-%EB%A7%8C%EB%93%A4%EA%B8%B0

 

[웹 개발] CRUD(생성,읽기,수정,삭제) 페이지 만들기

저번시간엔 로그인&로그아웃 인증을 구현하였습니다. https://jamesbexter.tistory.com/entry/2%EC%A3%BC%EC%B0%A8-%EA%B3%BC%EC%A0%9C-%ED%9A%8C%EC%9B%90%EA%B0%80%EC%9E%85-%ED%8E%98%EC%9D%B4%EC%A7%80-%EB%A7%8C%EB%93%A4%EA%B8%B0 회원가입

jamesbexter.tistory.com

 

 

 

이번시간에는 검색 및 정렬 기능을 구현해보겠습니다.


 

메인페이지 화면에 검색창을 추가하였습니다.

 

page.php 화면

 

 


 

검색조건으로는 제목 ,작성자 , 내용 이 들어가게됩니다.

검색조건 선택바

 

정렬기능으로는 제목,날짜순,좋아요 순으로 정렬이 가능해졌습니다!

정렬기능 선택바

 


 

날짜조건 또한 넣어주어 기간내의 게시물을 검색할 수 있게 만들었습니다.

기본값은 2024-01-01~2025-12-30 입니다.

날짜조건 선택창

 

 


코드설명

 

<page.php>

<?php 
    include 'dbcon.php';

    session_start(); 
    if(!($_SESSION['loggedin'])){	// 점프해서 page.php 로 오는것을 방지.
        header('Location: /index.php');
        exit();
    }

    $page_viewed=8;
    $current_page= isset($_GET['pageidx']) ? $_GET['pageidx']:1; //기본적으로 페이지는 1페이지로 시작

    // 검색 조건과 검색어 가져오기
    $stand = isset($_POST['stand']) ? $_POST['stand'] : 'post_name'; // 기본적으로 제목으로 검색
    $search = isset($_POST['search']) ? $_POST['search'] : '';
    $sort = isset($_POST['sort']) ? $_POST['sort'] : 1;// 기본적으로 제목으로 정렬
    $startdate = isset($_POST['startdate']) ? $_POST['startdate'] : '2024-01-01';// 날짜 설정 안할시 자동으로 min 값
    $enddate = isset($_POST['enddate']) ? $_POST['enddate'] : '2025-12-29';// 날짜 설정 안할시 자동으로 max 값
?>

<!DOCTYPE html>

<html lang="en">
<head>
    <style>     /*a 태그 스타일시트*/
        a:link {
            color : black;
            text-decoration-line: none;
        }
        a:hover{
            text-decoration-line: underline;
        }

    </style>
    
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="holygrail.css" rel="stylesheet" type = "text/css">
    <link href="div.css" rel="stylesheet" type = "text/css">
    <title>감자대학교 메인페이지</title>
</head>
<body>
    <div class="wrapper">
        <header>
        <div style="text-align:center ; color: #B86824; font-size:20px ; font-weight:semi bold;transform:translate(0px,10px)">GamJa National University</div>
        <div style="text-align: right ;font-weight:bold;transform:translate(-20px,-10px)"><a style="color:purple" href = "mypage.php">마이페이지</a></div>
        </header>

        <nav>
            카테고리
            <form action="logout.php" method="POST"><div style="position:absolute;bottom:0px;left:10px;width:20%">
            <input style="height:30px" type = submit class="submit-btn" value="Logout"></form></div>

            <form action="post_write.php" method="POST"><div style="position:absolute;top:170px;left:10px;width:20%">
            <input style="height:40px" type = submit class="submit-btn" value="게시글 작성"></form></div>
        </nav>
        <main>
                <div>
                    <form style="text-align:left" method="POST">
                    <select name="stand">
                        <option value="post_name">제목</option>
                        <option value="postwriter">작성자</option>
                        <option value="contents">내용</option>
                    </select>
                    <input style="border: solid 1.5px black;width:25%;transform:translate(0px,-1px)" type="text" name ="search" placeholder = "검색" maxlength='30' >
                    <input style="border: solid 1.5px black" type = submit value="검색">
                    
                    <select name="sort">
                        <option value="post_name">제목순</option>
                        <option value="postdate desc">최신순</option>
                        <option value="postdate asc">오래된순</option>
                        <option value="liked">좋아요순</option>
                    </select>
                    
                    <input name="startdate" type="datetime-local" max="2025-12-29" min="2024-01-01" value="2024-01-01T00:00">
                    <input name="enddate" type="datetime-local" max="2025-12-29" min="2024-01-01" value="2025-12-30T00:00">
                </form>
                </div>

                <br><hr style="border: solid 1px #696969;height:1px;width:100%">

                <table style=border-collapse:collapse;width:100%;>
                    <tr style="border-bottom:2px solid black;">
                        <td width="50%">글 제목</td><td width="30%">작성자</td><td style="text-align:center" width="5%" >liked</td><td style="text-align:center" width="5%" >view</td><td style="text-align:center" width="20%" >날짜</td>
                    </tr>
                    <?php // postinfo 테이블 에서 게시글 내용 8개 가져오는 코드 시작.

                        $sql = "select * from postinfo where postdate BETWEEN '".$startdate."' AND '".$enddate."' and ".$stand." like '%".$search."%' order by ".$sort;      //검색기능을 포함한 sql 구문생성
                        $result = mysqli_query($dbcon,$sql);
                        $row=mysqli_fetch_array($result);

                        for($count=1;$count<=15;$count=$count+1){?>
                            <tr height="45px" style="border-bottom: 1px solid #696969">
                                <td width="50%"><a href="post_read.php?idx=<?php echo $row['idx']; ?>"><?php echo $row['post_name']; ?></a></td>
                                <td width="20%"><?php echo $row['postwriter']; ?></td>
                                <td style="text-align:center" width="5%" height="5%" ><?php echo $row['liked']; ?></td>
                                <td style="text-align:center" width="5%" height="5%" ><?php echo $row['view']; ?></td>
                                <td style="text-align:center" width="20%" height="5%" ><?php echo $row['postdate']; ?></td>
                            </tr><?php 
                            $row=mysqli_fetch_array($result);    
                        }
                    ?>

                
        </main>
    
</body>
</html>