본문 바로가기
Project/project 1 - JH community

[php] 문의 게시판 페이지 1 - 메인페이지 만들기

by 끊임없는정진 2022. 12. 13.

※ 보안적 요소는 거의 고려하지 않고 php명령어 숙달용으로 혼자서 만드는 로그인 페이지 입니다.

 

▶게시판 페이지를 위해 만들어야 할 파일 (※이번 시간에 만들파일은 굵은 글씨로 표기)

 

inquiry.php : 문의게시판 메인화면

inquiry_read.php : 문의게시판 읽기 페이지

inquiry_modify.php : 문의게시판 수정페이지

inquiry_delete.php : 문의게시판 삭제 처리 페이지

inqmodi_check.php : 문의게시판 수정 처리 페이지

inquiry_search.php : 문의게시판 검색 페이지

pwcheck.php : 문의게시판 게시글 읽기 전 비밀번호 확인 페이지

pwcheck2.php : 문의게시판 삭제 전 비밀번호 확인 페이지

pwcheck3.php : 문의게시판 글 수정 전 비밀번호 확인 페이지

 

▶DB(DataBase) 구상

 

 전에 만든 게시판과 다른 db를 쓰기로 해서, 'QnA'로 하나의 데이터베이스를 만들었다. 하지만, db의 구성은 게시판과 크게 다르지 않다. 문의사항을 남기는 게시판이기 때문에 양식이 크게 다르지 않기 때문이다. 차이점이 일부 있는데, 타인이 나의 게시글을 볼 수 없게끔 의도했으니깐, 좋아요 기능은 없는게 낫다고 생각해서 삭제했다. 또한, 해당 게시글에 비밀번호를 걸고 '운영자' , '문의고객' 단 둘만 보도록 의도했으니깐, '비밀번호' 역시 당연히 저장해야 한다고 생각해서 비밀번호 란을 신설했다. 대강 아래와 같이 db구축이 되면 완료라고 볼 수 있다.

create table inquiry (
  idx int not null primary key auto_increment,
  title varchar(255) not null,
  content text not null,
  file varchar(255) NOT NULL default '',
  name varchar(255) NOT NULL default '',
  pw varchar(255) NOT NULL default '',
  date datetime not null,
  phone varchar(10) not null default '',
  hit int not null default 0
   );

'QnA' 데이터베이스 안 'inquiry' 테이블

 

▶연결파일(db.php) 구상

 

 이제 연결할 데이터베이스가 많이늘었다. 총 3개의 database를 연결해야 하는데, 첫번째로 address db('우체국 주소 db'), 두번째로 post_board db('게시판 db'), 마지막으로 QnA db('문의게시글 db')를 연결해야 한다. 따라서, 한 db자료에 전부 명시해놓으면 하나의 db파일로 여러 db에 접근하는 것을 가능하게 만들 수 있다. 나는 다음과 같이 db.php 를 수정해서 구성했다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$mysql_host = "localhost";
$mysql_user = "admin";
$mysql_password = "student";
$mysql_db1 = "post_board";
$mysql_db2 = "QnA";
$mysql_db3 = "address";
$conn1 = mysqli_connect($mysql_host$mysql_user$mysql_password$mysql_db1);
$conn2 = mysqli_connect($mysql_host$mysql_user$mysql_password$mysql_db2);
$conn3 = mysqli_connect($mysql_host$mysql_user$mysql_password$mysql_db3);
if (!$conn1 OR !$conn2 OR !$conn3){
    die("connection error! : " . mysqli_connect_error());
}
ini_set('display_errors''0');
session_start();
?>
cs

 

 

▶문의게시판 메인페이지( inquiry.php)

 

문의게시판 메인페이지는 게시판처럼 바로 글 내용을 목록화해서 출력하게끔 구성했다. 다만, 다른 db를 사용하므로, db연결 변수는 $conn2 ('QnA' db) 로 연결한다. 또한, 익명게시판이므로 로그인은 필요없으니, 세션검사하는 항목은 빼버린다. 이외의 구성은 게시판 출력과 다른점이 크게 없다. 주요 문의게시판 구조는 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
<?php
include ("db.php");
?>
<!doctype html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" href="./css/bootstrap.css">
<link rel="stylesheet" type="text/css" href="./css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.7.1/font/bootstrap-icons.css">
<title>문의게시판</title>
</head>
<body>
 
  <!--게시글 목록 윗부분-->
  <table class="table table-hover">
    <thead>
      <tr>
        <th scope="col">번호</th>
        <th scope="col">제목</th>
        <th scope="col">문의자</th>
        <th scope="col">작성일</th>
        <th scope="col">조회수</th>
      </tr>
    </thead>
  <tbody>
  <!--변수설정-->
<?php
 
  if(isset($_GET['page'])){
      $page = $_GET['page'];
    }else{
      $page = 1;
        }
 
$sql = "SELECT * FROM inquiry";
$res = mysqli_query($conn2,$sql);
$sql_row = mysqli_fetch_array($res);
$row_num = mysqli_num_rows($res);
$list = 5;
$block_ct = 5;
 
$block_num = ceil($page/$block_ct);
$block_start = (($block_num - 1* $block_ct+ 1;
$block_end = $block_start + $block_ct - 1;
$total_page = ceil($row_num / $list);
if($block_end > $total_page$block_end = $total_page;
$total_block = ceil($total_page/$block_ct);
$start_num = ($page-1* $list;
 
$sql2 = "select * from inquiry order by idx desc limit $start_num, $list";
$result = mysqli_query($conn2$sql2);
    while($inquiry = mysqli_fetch_array($result)){
    $title=$inquiry["title"];
      if(strlen($title)>30)
        {
      $title=str_replace($inquiry["title"],mb_substr($inquiry["title"],0,30,"utf-8")."...",$inquiry["title"]);
        }
?>
 
<!-- 게시판 목록 출력 -->
 
  <tr class="table-light">
    <th scope="row"><?php echo $inquiry['idx']; ?></th>
    <td><a href='./pwcheck.php?idx=<?=$inquiry["idx"];?>'><?=$title?></a></td>
    <td><?php echo $inquiry['name'];?></td>
    <td><?php echo $inquiry['date'];?></td>
    <td><?php echo $inquiry['hit']; ?></td>
  </tr>
</tbody>
<?php } ?>
</table>
 
<div>
  <ul class="pagination d-flex justify-content-center">
    <?php
//처음
    if($page <= 1)
    {
    echo '<li class="page-item disabled">';
    echo '<a class="page-link" href="#">처음</a></li>';
    }else{
    echo '<li class="page-item">';
    echo '<a class="page-link" href="?page=1">처음</a></li>';
    }
 
//이전
    if($page <= 1)
    {
 
    }else{
    $pre = $page-1;
    echo '<li class="page-item">';
    echo '<a class="page-link" href="?page='.$pre.'">이전</a></li>';
    }
 
//숫자
    for($i=$block_start$i<=$block_end$i++){
      if($page == $i){
    echo '<li class="page-item active">';
    echo '<a class="page-link" href="#">'.$i.'</a></li>';
  }else{
    echo '<li class="page-item">';
    echo '<a class="page-link" href="?page='.$i.'">'.$i.'</a></li>';
  }
}
 
//다음
    if($page >= $block_end){
 
    }else{
      $next = $page + 1;
      echo '<li class="page-item">';
      echo '<a class="page-link" href="?page='.$next.'">다음</a></li>';
    }
 
//마지막
    if($page >= $total_page)
    {
    echo '<li class="page-item disabled">';
    echo '<a class="page-link" href="#">마지막</a></li>';
    }else{
    echo '<li class="page-item">';
    echo '<a class="page-link" href="?page='.$total_page.'">마지막</a></li>';
    }
  ?>
 
</ul>
</div>
 
 
  <form class="row g-2" action="./inquiry_search.php" method="get">
    <div class="row">
      <div class="col-md-2">
        <select class="form-select" name="catgo">
          <option value="title">제목</option>
          <option value="name">글쓴이</option>
          <option value="content">내용</option>
        </select>
      </div>
      <div class="col-md-8">
        <input class="form-control" type="text" name="search" required="required" />
      </div>
      <div class="col-md-2">
        <button class="btn btn-dark" type="submit">검색</button>
      </div>
    </div>
 
    <div class ="col-md-12 m-3" >
      날짜 선택 : <input type=date value="<?=$date1?>" name=date1>에서</input>
      <input type=date value="<?=$date2?>" name=date2>까지</input>
    </div>
  </form>
</body>
</html>
 
cs

댓글