본문 바로가기
WEB HACKING/웹 해킹[실습]

Php로 웹 개발하기 : 게시판(1) - Setting & Print List

by madevth 2021. 11. 2.
반응형

이번 실습에서는 게시판을 만들어볼 것이다.

기본적으로 게시판 CRUD에다가 파일 업로드, 좋아요, 조회수 표시, 페이징, 검색 등등 꽤 만들 기능이 많아서 게시판 만들기(10)까지 나올 것 같다. 기능도 많고 CSS도 많이 들어갈 것 같아서 먼저 대강 이미지를 그려봤다.

두 번째 게시판 글 세부 내용 사진은 그리기 귀찮아져서 저런 건 절대 아니다. 아무튼 아니다.

 

게시판 파일을 하나 만들고 Test DB를 구축하자.

mysql> CREATE TABLE board (
    ->     `username` varchar(20) NOT NULL,
    ->     `title` varchar(20),
    ->     `views` int(5) DEFAULT 0,
    ->     `date` char(10),
    ->     `time` char(5),
    ->     PRIMARY KEY(username, date, time),
    ->     FOREIGN KEY(username) REFERENCES `login` (login_id)
    -> );

한 사용자가 글을 여러 개 작성할 수 있으므로 Primary Key는 날짜와 시간까지 더해서 만들어주었다. (1분 안에 2개 이상의 글을 쓰는 사람이 없다고 가정) 그리고 회원 가입한 사용자의 아이디는 전부 login table의 login_id에 저장되므로 username을 login_id를 참조해서 Foreign Key로 설정해주었다.

데이터를 몇 개 넣어준 뒤 확인해보자.

username을 Foreign Key로 설정했기 때문에 login 테이블에 없는 ID, 즉 회원 가입하지 않은 사용자의 이름으로는 글을 작성할 수 없다.

 

이제 웹 코드를 짜보자.

board.php를 만들어준 후, 주소 검색에서 사용했던 코드를 가져와서 변수명들만 조금 바꿔준다.

<?php
    function board(){
        if(isset($_POST['board_search']) && $_POST['board_search'] != NULL){
            $userID = $_POST['board_search'];

            $conn = mysqli_connect('localhost', 'ID', 'PW', 'DBname');
            $sql = "SELECT * FROM board where username like '$userID';";
            $result = mysqli_query($conn, $sql);
            
            if(mysqli_num_rows($result) > 0){
                while($row = mysqli_fetch_array($result)){
                    echo "<tr><td>".$row['username']."</td><td>".$row['title']."</td><td>".$row['views']."</td><td>".$row['date']."</td></tr>";
                }
            } else{
                echo "<script>alert('사용자가 존재하지 않습니다.')</script>";
            }
            mysqli_close($conn);
        } else{
            echo "<tr><td>검색해주세요.</td><td>0</td></tr>";
        }
    }
?>

결과도 잘 나오는 것을 확인할 수 있다.

 

user ID로 검색할 것인지, Title로 설정할 것인지 선택할 수 있는 기능도 추가해주어야 하고,

주소 검색과는 다르게 검색을 누르기 전에 Default로 최신순 / 인기순에 따라 정렬된 테이블을 보여주는 부분도 추가로 만들어야 한다.

반응형

댓글