Mukho

board-session

...@@ -48,8 +48,22 @@ DB구조 - board에서 사용됨(*idx, name, title, content, regdate, modidate, ...@@ -48,8 +48,22 @@ DB구조 - board에서 사용됨(*idx, name, title, content, regdate, modidate,
48 *idx int, name varchar(50), title varchar(50), content mediumtext, regdate datetime, modidate datetime, passwd varchar(50), hit int<br> 48 *idx int, name varchar(50), title varchar(50), content mediumtext, regdate datetime, modidate datetime, passwd varchar(50), hit int<br>
49 49
50 50
51 -LF 오류시 git config --global core.autocrlf true 입력<br><br> 51 +<h2>LF 오류시 git config --global core.autocrlf true 입력<h2><br>
52 +<h2>게시글 reset 후 idx의 값이 1부터 시작하지 않을 경우
53 +ALTER TABLE board AUTO_INCREMENT = 1;
54 +SET @COUNT = 0;
55 +UPDATE board SET idx = @COUNT:=@COUNT+1;
56 +입력<h2><br><br>
52 57
53 -최종 수정: 2021-11-19 16:28<br> 58 +최종 수정: 2021-11-20 12:32<br>
54 -최종 수정 내용: 버그 수정, 게시글 조회수 구현, 프로필 수정 세션 연동, about/사이트 git 링크 추가, 프로필 추가<br> 59 +최종 수정 내용:
55 -수정 내용: 메뉴바/하단 추가, 게시판에 기본 서식 추가, 로그인시에만 게시판 관련 경로에 접근가능하게 함, 사용자 로그 생성, 경로 지정 수정, 제목 추가, userDB, 회원가입에 nickname요소 추가, 세션에 ID + 닉네임 전달기능 추가, 게시판의 글쓰기 및 글 열람 기능 추가. 60 +<h2>★★필수입력★★<h2>
61 +alter table board drop passwd;
62 +alter table board add ID varchar(20) not null;
63 +alter table board change name nickname;
64 +alter table board modify nickname varchar(20);
65 +
66 +게시글 수정 및 삭제 세션+권한 연동/DB수정, 버그 수정, 게시글 조회수 구현, 프로필 수정 세션 연동<br>
67 +수정 내용: about/사이트 git 링크 추가, 프로필 추가, 메뉴바/하단 추가, 게시판에 기본 서식 추가, 로그인시에만 게시판 관련 경로에 접근가능하게 함, 사용자 로그 생성, 경로 지정 수정, 제목 추가, userDB, 회원가입에 nickname요소 추가, 세션에 ID + 닉네임 전달기능 추가, 게시판의 글쓰기 및 글 열람 기능 추가.
68 +
69 +<!-- http://khuhub.khu.ac.kr/2017104034/Singer-Composer -->
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -13,7 +13,7 @@ router.get('/list/:page', function(req, res, next) { ...@@ -13,7 +13,7 @@ router.get('/list/:page', function(req, res, next) {
13 if(!id) res.redirect('/board/list/1') 13 if(!id) res.redirect('/board/list/1')
14 else{ 14 else{
15 var page = req.params.page; 15 var page = req.params.page;
16 - var sql = "select idx, name, title, date_format(modidate,'%Y-%m-%d %H:%i:%s') modidate, " + 16 + var sql = "select idx, nickname, title, date_format(modidate,'%Y-%m-%d %H:%i:%s') modidate, " +
17 "date_format(regdate,'%Y-%m-%d %H:%i:%s') regdate, hit from board order by idx desc"; 17 "date_format(regdate,'%Y-%m-%d %H:%i:%s') regdate, hit from board order by idx desc";
18 board.query(sql, function(err,rows) { 18 board.query(sql, function(err,rows) {
19 if (err) console.error("err : " + err); 19 if (err) console.error("err : " + err);
...@@ -43,22 +43,15 @@ router.get('/write', function(req,res,next){ ...@@ -43,22 +43,15 @@ router.get('/write', function(req,res,next){
43 }) 43 })
44 44
45 router.post('/write', function(req,res,next){ 45 router.post('/write', function(req,res,next){
46 - var id = req.user.ID 46 + var nickname = req.user.nickname // var name = req.body.name
47 - var nickname = req.user.nickname
48 - //var name = req.body.name
49 var title = req.body.title 47 var title = req.body.title
50 var content = req.body.content 48 var content = req.body.content
51 - //var passwd = req.body.passwd 49 + var ID = req.user.ID
52 - var datas = [ID, nickname,title,content] 50 + var datas = [nickname, title, content, ID]
53 51
54 - var id; 52 + var sql = "insert into board(nickname, title, content, regdate, modidate, hit, ID) values(?,?,?,now(),now(),0, ?)";
55 - var nickname; 53 + board.query(sql, datas, function (err, rows) {
56 - var sql = "insert into board(name, title, content, regdate, modidate, passwd, hit) values(?,?,?,now(),now(),?,0)";
57 - board.query(sql,datas, function (err, rows) {
58 if (err) console.error("err : " + err); 54 if (err) console.error("err : " + err);
59 -
60 - id = req.user.ID;
61 - nickname = req.user.nickname;
62 }); 55 });
63 56
64 var idx_; 57 var idx_;
...@@ -67,6 +60,9 @@ router.post('/write', function(req,res,next){ ...@@ -67,6 +60,9 @@ router.post('/write', function(req,res,next){
67 if(err) console.error("err : " + err); 60 if(err) console.error("err : " + err);
68 idx_ = rows[0].idx; 61 idx_ = rows[0].idx;
69 62
63 + if(!idx_) // 글이 없으면 NULL
64 + idx_ = 1;
65 +
70 console.log(req.user.ID+'('+nickname+') 유저가 '+idx_+'번 게시글을 작성했습니다.') 66 console.log(req.user.ID+'('+nickname+') 유저가 '+idx_+'번 게시글을 작성했습니다.')
71 res.redirect('/board/read/'+idx_); 67 res.redirect('/board/read/'+idx_);
72 }); 68 });
...@@ -74,9 +70,9 @@ router.post('/write', function(req,res,next){ ...@@ -74,9 +70,9 @@ router.post('/write', function(req,res,next){
74 70
75 router.get('/read/:idx', function(req,res,next){ 71 router.get('/read/:idx', function(req,res,next){
76 var idx = req.params.idx 72 var idx = req.params.idx
77 - var sql = "select idx, name, title, content, date_format(modidate,'%Y-%m-%d %H:%i:%s') modidate, " + 73 + var sql = "select idx, nickname, title, content, date_format(modidate,'%Y-%m-%d %H:%i:%s') modidate, " +
78 - "date_format(regdate,'%Y-%m-%d %H:%i:%s') regdate, hit from board where idx=?"; 74 + "date_format(regdate,'%Y-%m-%d %H:%i:%s') regdate, hit, ID from board where idx=?";
79 - board.query(sql,[idx], function(err,row){ 75 + board.query(sql, [idx], function(err,row){
80 if(err) console.error(err) 76 if(err) console.error(err)
81 77
82 var id = req.user; 78 var id = req.user;
...@@ -98,18 +94,17 @@ router.get('/read/:idx', function(req,res,next){ ...@@ -98,18 +94,17 @@ router.get('/read/:idx', function(req,res,next){
98 }) 94 })
99 95
100 router.post('/update', function(req,res,next){ 96 router.post('/update', function(req,res,next){
97 + var ID = req.user.ID;
101 var idx = req.body.idx 98 var idx = req.body.idx
102 - var name = req.body.name
103 var title = req.body.title 99 var title = req.body.title
104 var content = req.body.content 100 var content = req.body.content
105 - var passwd = req.body.passwd 101 + var datas = [title, content, idx, ID]
106 - var datas = [name, title, content, idx, passwd]
107 102
108 - var sql = "update board set name = ?,title=?,content=?,modidate=now() where idx =? and passwd=?" 103 + var sql = "update board set title=?,content=?,modidate=now() where idx =? and ID=?"
109 board.query(sql,datas,function(err,result){ 104 board.query(sql,datas,function(err,result){
110 if(err) console.error(err) 105 if(err) console.error(err)
111 if(result.affectedRows==0){ 106 if(result.affectedRows==0){
112 - res.send("<script>alert('패스워드가 일치하지 않습니다.');history.back();</script>") 107 + res.send("<script>alert('게시글 작성자가 아닙니다.');history.back();</script>")
113 } 108 }
114 else{ 109 else{
115 var id = req.user.ID; 110 var id = req.user.ID;
...@@ -122,22 +117,40 @@ router.post('/update', function(req,res,next){ ...@@ -122,22 +117,40 @@ router.post('/update', function(req,res,next){
122 117
123 router.post('/delete', function(req,res,next){ 118 router.post('/delete', function(req,res,next){
124 var idx = req.body.idx 119 var idx = req.body.idx
125 - var passwd = req.body.passwd 120 + var ID = req.user.ID;
126 - var datas = [idx,passwd] 121 + var datas = [idx,ID]
127 -
128 - var sql = "delete from board where idx=? and passwd=?"
129 122
123 + var sql = "delete from board where idx=? and ID=?"
130 board.query(sql,datas, function(err,result){ 124 board.query(sql,datas, function(err,result){
131 if(err) console.error(err) 125 if(err) console.error(err)
126 +
127 + // 삭제를 요청한 사용자가 작성자가 아닌 경우
132 if(result.affectedRows == 0){ 128 if(result.affectedRows == 0){
133 - res.send("<script>alert('패스워드가 일치하지 않습니다.');history.back();</script>"); 129 + // 운영자세요?
130 + var sql_ = 'select type from userdb where ID="'+ID+'"';
131 + board.query(sql_, function(err_, result_){
132 + if(err_) console.error(err_)
133 +
134 + if(result_[0].type == "운영자"){ // 작성자는 아니나 유저 타입이 운영자인 경우
135 + var sqlAdmin = 'delete from board where idx="'+idx+'"';
136 + board.query(sqlAdmin, function(err__, result__){
137 + if(err__) console.error(err__)
138 +
139 + var nickname = req.user.nickname;
140 + res.send("<script>alert('게시글이 운영자에 의해 삭제되었습니다.');window.location.href='/board/list/';</script>");
141 + console.log("[Admin] "+req.user.ID+'('+nickname+') 유저가 '+idx+'번 게시글을 삭제했습니다.')
142 + })
143 + }
144 + else{ // 작성자도, 운영자도 아니면
145 + res.send("<script>alert('게시글 작성자가 아닙니다');history.back();</script>");
146 + }
147 + })
134 } 148 }
135 - else 149 + else{ // 작성자인 경우
136 - {
137 var id = req.user.ID; 150 var id = req.user.ID;
138 var nickname = req.user.nickname; 151 var nickname = req.user.nickname;
152 + res.send("<script>alert('게시글이 삭제되었습니다.');window.location.href='/board/list/';</script>");
139 console.log(req.user.ID+'('+nickname+') 유저가 '+idx+'번 게시글을 삭제했습니다.') 153 console.log(req.user.ID+'('+nickname+') 유저가 '+idx+'번 게시글을 삭제했습니다.')
140 - res.redirect('/board/list/');
141 } 154 }
142 }) 155 })
143 }) 156 })
......
...@@ -52,7 +52,7 @@ ...@@ -52,7 +52,7 @@
52 %> 52 %>
53 <tr> 53 <tr>
54 <td><%=data.idx%></td> 54 <td><%=data.idx%></td>
55 - <td><%=data.name%></td> 55 + <td><%=data.nickname%></td>
56 <td><a href="/board/read/<%=data.idx%>"><%=data.title%></a></td> 56 <td><a href="/board/read/<%=data.idx%>"><%=data.title%></a></td>
57 <td><%=data.hit%></td> 57 <td><%=data.hit%></td>
58 <td><%=data.modidate%></td> 58 <td><%=data.modidate%></td>
......
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
43 <input type="hidden" name="idx" value="<%=row.idx%>"/> 43 <input type="hidden" name="idx" value="<%=row.idx%>"/>
44 <tr> 44 <tr>
45 <td>작성자</td> 45 <td>작성자</td>
46 - <td><input type="text" name="name" id="name" value="<%=row.name%>" required/></td> 46 + <td><%=nickname%></td>
47 </tr> 47 </tr>
48 <tr> 48 <tr>
49 <td>제목</td> 49 <td>제목</td>
...@@ -54,10 +54,6 @@ ...@@ -54,10 +54,6 @@
54 <td><textarea name="content" id="content" cols="30" rows="10" required><%=row.content%></textarea></td> 54 <td><textarea name="content" id="content" cols="30" rows="10" required><%=row.content%></textarea></td>
55 </tr> 55 </tr>
56 <tr> 56 <tr>
57 - <td>패스워드</td>
58 - <td><input type="password" name="passwd" id="passwd" required/></td>
59 - </tr>
60 - <tr>
61 <td>변경일</td> 57 <td>변경일</td>
62 <td><%=row.modidate%></td> 58 <td><%=row.modidate%></td>
63 </tr> 59 </tr>
......
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
35 <table border="1"> 35 <table border="1">
36 <tr> 36 <tr>
37 <td>작성자</td> 37 <td>작성자</td>
38 - <td><input type="text" name="name" id="name" required/></td> 38 + <td><%=nickname%></td>
39 </tr> 39 </tr>
40 <tr> 40 <tr>
41 <td>제목</td> 41 <td>제목</td>
...@@ -46,10 +46,6 @@ ...@@ -46,10 +46,6 @@
46 <td><textarea name="content" id="content" cols="30" rows="10" required></textarea></td> 46 <td><textarea name="content" id="content" cols="30" rows="10" required></textarea></td>
47 </tr> 47 </tr>
48 <tr> 48 <tr>
49 - <td>패스워드</td>
50 - <td><input type="password" name="passwd" id="passwd" required/></td>
51 - </tr>
52 - <tr>
53 <td colspan="2"> 49 <td colspan="2">
54 <button type="submit">글쓰기</button> 50 <button type="submit">글쓰기</button>
55 </td> 51 </td>
......