Mukho

board-session

......@@ -48,8 +48,22 @@ DB구조 - board에서 사용됨(*idx, name, title, content, regdate, modidate,
*idx int, name varchar(50), title varchar(50), content mediumtext, regdate datetime, modidate datetime, passwd varchar(50), hit int<br>
LF 오류시 git config --global core.autocrlf true 입력<br><br>
<h2>LF 오류시 git config --global core.autocrlf true 입력<h2><br>
<h2>게시글 reset 후 idx의 값이 1부터 시작하지 않을 경우
ALTER TABLE board AUTO_INCREMENT = 1;
SET @COUNT = 0;
UPDATE board SET idx = @COUNT:=@COUNT+1;
입력<h2><br><br>
최종 수정: 2021-11-19 16:28<br>
최종 수정 내용: 버그 수정, 게시글 조회수 구현, 프로필 수정 세션 연동, about/사이트 git 링크 추가, 프로필 추가<br>
수정 내용: 메뉴바/하단 추가, 게시판에 기본 서식 추가, 로그인시에만 게시판 관련 경로에 접근가능하게 함, 사용자 로그 생성, 경로 지정 수정, 제목 추가, userDB, 회원가입에 nickname요소 추가, 세션에 ID + 닉네임 전달기능 추가, 게시판의 글쓰기 및 글 열람 기능 추가.
최종 수정: 2021-11-20 12:32<br>
최종 수정 내용:
<h2>★★필수입력★★<h2>
alter table board drop passwd;
alter table board add ID varchar(20) not null;
alter table board change name nickname;
alter table board modify nickname varchar(20);
게시글 수정 및 삭제 세션+권한 연동/DB수정, 버그 수정, 게시글 조회수 구현, 프로필 수정 세션 연동<br>
수정 내용: about/사이트 git 링크 추가, 프로필 추가, 메뉴바/하단 추가, 게시판에 기본 서식 추가, 로그인시에만 게시판 관련 경로에 접근가능하게 함, 사용자 로그 생성, 경로 지정 수정, 제목 추가, userDB, 회원가입에 nickname요소 추가, 세션에 ID + 닉네임 전달기능 추가, 게시판의 글쓰기 및 글 열람 기능 추가.
<!-- http://khuhub.khu.ac.kr/2017104034/Singer-Composer -->
\ No newline at end of file
......
......@@ -13,7 +13,7 @@ router.get('/list/:page', function(req, res, next) {
if(!id) res.redirect('/board/list/1')
else{
var page = req.params.page;
var sql = "select idx, name, title, date_format(modidate,'%Y-%m-%d %H:%i:%s') modidate, " +
var sql = "select idx, nickname, title, date_format(modidate,'%Y-%m-%d %H:%i:%s') modidate, " +
"date_format(regdate,'%Y-%m-%d %H:%i:%s') regdate, hit from board order by idx desc";
board.query(sql, function(err,rows) {
if (err) console.error("err : " + err);
......@@ -43,22 +43,15 @@ router.get('/write', function(req,res,next){
})
router.post('/write', function(req,res,next){
var id = req.user.ID
var nickname = req.user.nickname
//var name = req.body.name
var nickname = req.user.nickname // var name = req.body.name
var title = req.body.title
var content = req.body.content
//var passwd = req.body.passwd
var datas = [ID, nickname,title,content]
var ID = req.user.ID
var datas = [nickname, title, content, ID]
var id;
var nickname;
var sql = "insert into board(name, title, content, regdate, modidate, passwd, hit) values(?,?,?,now(),now(),?,0)";
board.query(sql,datas, function (err, rows) {
var sql = "insert into board(nickname, title, content, regdate, modidate, hit, ID) values(?,?,?,now(),now(),0, ?)";
board.query(sql, datas, function (err, rows) {
if (err) console.error("err : " + err);
id = req.user.ID;
nickname = req.user.nickname;
});
var idx_;
......@@ -67,6 +60,9 @@ router.post('/write', function(req,res,next){
if(err) console.error("err : " + err);
idx_ = rows[0].idx;
if(!idx_) // 글이 없으면 NULL
idx_ = 1;
console.log(req.user.ID+'('+nickname+') 유저가 '+idx_+'번 게시글을 작성했습니다.')
res.redirect('/board/read/'+idx_);
});
......@@ -74,9 +70,9 @@ router.post('/write', function(req,res,next){
router.get('/read/:idx', function(req,res,next){
var idx = req.params.idx
var sql = "select idx, name, title, content, date_format(modidate,'%Y-%m-%d %H:%i:%s') modidate, " +
"date_format(regdate,'%Y-%m-%d %H:%i:%s') regdate, hit from board where idx=?";
board.query(sql,[idx], function(err,row){
var sql = "select idx, nickname, title, content, date_format(modidate,'%Y-%m-%d %H:%i:%s') modidate, " +
"date_format(regdate,'%Y-%m-%d %H:%i:%s') regdate, hit, ID from board where idx=?";
board.query(sql, [idx], function(err,row){
if(err) console.error(err)
var id = req.user;
......@@ -98,18 +94,17 @@ router.get('/read/:idx', function(req,res,next){
})
router.post('/update', function(req,res,next){
var ID = req.user.ID;
var idx = req.body.idx
var name = req.body.name
var title = req.body.title
var content = req.body.content
var passwd = req.body.passwd
var datas = [name, title, content, idx, passwd]
var datas = [title, content, idx, ID]
var sql = "update board set name = ?,title=?,content=?,modidate=now() where idx =? and passwd=?"
var sql = "update board set title=?,content=?,modidate=now() where idx =? and ID=?"
board.query(sql,datas,function(err,result){
if(err) console.error(err)
if(result.affectedRows==0){
res.send("<script>alert('패스워드가 일치하지 않습니다.');history.back();</script>")
res.send("<script>alert('게시글 작성자가 아닙니다.');history.back();</script>")
}
else{
var id = req.user.ID;
......@@ -122,22 +117,40 @@ router.post('/update', function(req,res,next){
router.post('/delete', function(req,res,next){
var idx = req.body.idx
var passwd = req.body.passwd
var datas = [idx,passwd]
var sql = "delete from board where idx=? and passwd=?"
var ID = req.user.ID;
var datas = [idx,ID]
var sql = "delete from board where idx=? and ID=?"
board.query(sql,datas, function(err,result){
if(err) console.error(err)
// 삭제를 요청한 사용자가 작성자가 아닌 경우
if(result.affectedRows == 0){
res.send("<script>alert('패스워드가 일치하지 않습니다.');history.back();</script>");
// 운영자세요?
var sql_ = 'select type from userdb where ID="'+ID+'"';
board.query(sql_, function(err_, result_){
if(err_) console.error(err_)
if(result_[0].type == "운영자"){ // 작성자는 아니나 유저 타입이 운영자인 경우
var sqlAdmin = 'delete from board where idx="'+idx+'"';
board.query(sqlAdmin, function(err__, result__){
if(err__) console.error(err__)
var nickname = req.user.nickname;
res.send("<script>alert('게시글이 운영자에 의해 삭제되었습니다.');window.location.href='/board/list/';</script>");
console.log("[Admin] "+req.user.ID+'('+nickname+') 유저가 '+idx+'번 게시글을 삭제했습니다.')
})
}
else{ // 작성자도, 운영자도 아니면
res.send("<script>alert('게시글 작성자가 아닙니다');history.back();</script>");
}
})
}
else
{
else{ // 작성자인 경우
var id = req.user.ID;
var nickname = req.user.nickname;
res.send("<script>alert('게시글이 삭제되었습니다.');window.location.href='/board/list/';</script>");
console.log(req.user.ID+'('+nickname+') 유저가 '+idx+'번 게시글을 삭제했습니다.')
res.redirect('/board/list/');
}
})
})
......
......@@ -52,7 +52,7 @@
%>
<tr>
<td><%=data.idx%></td>
<td><%=data.name%></td>
<td><%=data.nickname%></td>
<td><a href="/board/read/<%=data.idx%>"><%=data.title%></a></td>
<td><%=data.hit%></td>
<td><%=data.modidate%></td>
......
......@@ -43,7 +43,7 @@
<input type="hidden" name="idx" value="<%=row.idx%>"/>
<tr>
<td>작성자</td>
<td><input type="text" name="name" id="name" value="<%=row.name%>" required/></td>
<td><%=nickname%></td>
</tr>
<tr>
<td>제목</td>
......@@ -54,10 +54,6 @@
<td><textarea name="content" id="content" cols="30" rows="10" required><%=row.content%></textarea></td>
</tr>
<tr>
<td>패스워드</td>
<td><input type="password" name="passwd" id="passwd" required/></td>
</tr>
<tr>
<td>변경일</td>
<td><%=row.modidate%></td>
</tr>
......
......@@ -35,7 +35,7 @@
<table border="1">
<tr>
<td>작성자</td>
<td><input type="text" name="name" id="name" required/></td>
<td><%=nickname%></td>
</tr>
<tr>
<td>제목</td>
......@@ -46,10 +46,6 @@
<td><textarea name="content" id="content" cols="30" rows="10" required></textarea></td>
</tr>
<tr>
<td>패스워드</td>
<td><input type="password" name="passwd" id="passwd" required/></td>
</tr>
<tr>
<td colspan="2">
<button type="submit">글쓰기</button>
</td>
......