Mukho

Divide board

module.exports=(function(){
return{
board:{
notice_board:{
host:'localhost',
port:3306,
user:'root',
password:'',
database:'singer_composer'
},
composer_board:{
host:'localhost',
port:3306,
user:'root',
password:'',
database:'singer_composer'
},
singer_board:{
host:'localhost',
port:3306,
user:'root',
password:'',
database:'singer_composer'
},
free_board:{
host:'localhost',
port:3306,
user:'root',
password:'',
database:'singer_composer'
},
suggestion_board:{
host:'localhost',
port:3306,
user:'root',
......
......@@ -22,7 +22,7 @@
<a class="navbar-brand" href="/main">묵호의 놀이터</a>
<ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0">
<li><a href="/about" class="nav-link px-2 link-dark">About</a></li>
<li><a href="/board/list" class="nav-link px-2 link-dark">게시판</a></li>
<li><a href="/board" class="nav-link px-2 link-dark">게시판</a></li>
<li><a href="/chat" class="nav-link px-2 link-dark">채팅</a></li>
<li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li>
</ul>
......
......@@ -22,7 +22,7 @@
<a class="navbar-brand" href="/main">묵호의 놀이터</a>
<ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0">
<li><a href="/about" class="nav-link px-2 link-dark">About</a></li>
<li><a href="/board/list" class="nav-link px-2 link-dark">게시판</a></li>
<li><a href="/board" class="nav-link px-2 link-dark">게시판</a></li>
<li><a href="/chat" class="nav-link px-2 link-dark">채팅</a></li>
<li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li>
</ul>
......@@ -32,6 +32,24 @@
</div>
</div>
</nav>
<div class ="wrap">
<div class="list_board">
<a class="board_btn" href="/board/list/notice">
공지사항
</a>
<a class="board_btn" href="/board/list/composer">
작곡가 구인
</a>
<a class="board_btn" href="/board/list/singer">
가수 구인
</a>
<a class="board_btn" href="/board/list/free">
자유게시판
</a>
<a class="board_btn" href="/board/list/suggestion">
건의사항
</a>
</div>
<!-- Footer-->
<footer class="footer bg-light">
<div class="container">
......
......@@ -21,7 +21,7 @@
<a class="navbar-brand" href="/main">묵호의 놀이터</a>
<ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0">
<li><a href="/about" class="nav-link px-2 link-dark">About</a></li>
<li><a href="/board/list" class="nav-link px-2 link-dark">게시판</a></li>
<li><a href="/board" class="nav-link px-2 link-dark">게시판</a></li>
<li><a href="/chat" class="nav-link px-2 link-dark">채팅</a></li>
<li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li>
</ul>
......
......@@ -22,7 +22,7 @@
<a class="navbar-brand" href="/main">묵호의 놀이터</a>
<ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0">
<li><a href="/about" class="nav-link px-2 link-dark">About</a></li>
<li><a href="/board/list" class="nav-link px-2 link-dark">게시판</a></li>
<li><a href="/board" class="nav-link px-2 link-dark">게시판</a></li>
<li><a href="/chat" class="nav-link px-2 link-dark">채팅</a></li>
<li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li>
</ul>
......
......@@ -22,7 +22,7 @@
<a class="navbar-brand" href="/main">묵호의 놀이터</a>
<ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0">
<li><a href="/about" class="nav-link px-2 link-dark">About</a></li>
<li><a href="/board/list" class="nav-link px-2 link-dark">게시판</a></li>
<li><a href="/board" class="nav-link px-2 link-dark">게시판</a></li>
<li><a href="/chat" class="nav-link px-2 link-dark">채팅</a></li>
<li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li>
</ul>
......
......@@ -36,7 +36,7 @@ create table userdb(
profilepic varchar(300) unique
)engine=innodb;
create table board(
create table _board(
idx int not null primary key auto_increment,
nickname varchar(50) not null,
title varchar(50) not null,
......@@ -47,13 +47,13 @@ create table board(
ID varchar(20) not null
)engine=innodb;
create table comment(
create table _comment(
idx int auto_increment primary key,
ID varchar(20) not null,
nickname varchar(50) not null,
comment mediumtext not null,
bulletin_id int not null,
foreign key (bulletin_id) references board(idx) on delete cascade
foreign key (bulletin_id) references _board(idx) on delete cascade
)engine=innodb;
```
......@@ -69,8 +69,15 @@ create table comment(
>SET @COUNT = 0;<br>
>UPDATE board SET idx = @COUNT:=@COUNT+1;
- 게시판 추가 DB 이름(댓글은 board 대신 comment)
>공지사항: notice_board
>작곡가 구인: composer_board
>가수 구인: singer_board
>자유게시판: free_board
>건의사항: suggestion_board
---
### 최종 수정: 2021-11-29 19:47<br>
### 최종 수정: 2021-12-01 01:22<br>
### 수정 내용:
1. 채팅 구현(팝업)
2. 시간 실시간 반영
......@@ -82,4 +89,5 @@ create table comment(
8. 버그 수정
9. 댓글 등록, 열람, 삭제 기능 구현 및 버그 픽스
10. 채팅 중 서버 재시작시 기존 참여자들 리셋시킴
11. 요소 좌우 길이 80%로 조절
\ No newline at end of file
11. 요소 좌우 길이 80%로 조절
12. 게시판 [공지사항/작곡가 구인/가수 구인/자유게시판/건의사항]으로 분화
\ No newline at end of file
......
......@@ -28,53 +28,800 @@ function init(){
}
init()
router.get('/list/:page', function(req, res, next) {
router.get('/', function(req,res,next){
var ip = requestIp.getClientIp(req);
var id = req.user;
if(!id){
console.log(logString+'익명 유저의 게시판 접근을 거부했습니다.('+ip+')')
res.redirect('/board/list/1')
console.log(logString+'익명 유저의 공지사항 게시판 접근을 거부했습니다.('+ip+')')
res.sendFile(path.join(__dirname, "../../public/login.html"))
}
else res.redirect('/board/list/notice/1')
})
// 공지사항
router.get('/list/notice/:page', function(req, res, next) {
var ip = requestIp.getClientIp(req);
var id = req.user;
if(!id){
console.log(logString+'익명 유저의 공지사항 게시판 접근을 거부했습니다.('+ip+')')
res.redirect('/board/list/notice/1')
}
else{
var page = req.params.page;
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 notice_board order by idx desc";
board.query(sql, function(err,rows) {
if (err) console.error("err : " + err);
var id = req.user.ID;
var nickname = req.user.nickname;
console.log(logString+req.user.ID+'('+nickname+') 유저가 공지사항 게시판을 보고있습니다.('+ip+')')
res.render('list.ejs', {'ID':id, 'nickname': nickname, title: '공지사항', rows: rows, page:page, length:rows.length-1,page_num:10,pass:true})
})
}
});
router.get('/notice', function(req,res,next){
var ip = requestIp.getClientIp(req);
var id = req.user;
if(!id){
console.log(logString+'익명 유저의 공지사항 게시판 접근을 거부했습니다.('+ip+')')
res.sendFile(path.join(__dirname, "../../public/login.html"))
}
else res.redirect('/board/list/notice/1')
})
router.get('/list/notice', function(req,res,next){
var ip = requestIp.getClientIp(req);
var id = req.user;
if(!id){
console.log(logString+'익명 유저의 공지사항 게시판 접근을 거부했습니다.('+ip+')')
res.sendFile(path.join(__dirname, "../../public/login.html"))
}
else res.redirect('/board/list/notice/1')
})
router.get('/write/notice', function(req,res,next){
var ip = requestIp.getClientIp(req);
var id = req.user;
if(!id){
console.log(logString+'익명 유저의 공지사항 글쓰기 시도를 거부했습니다.('+ip+')')
res.sendFile(path.join(__dirname, "../../public/login.html"))
}
else{
var id = req.user.ID;
var nickname = req.user.nickname;
console.log(logString+req.user.ID+'('+nickname+') 유저가 공지사항 게시글 작성 중입니다.('+ip+')')
res.render('write.ejs', {'ID':id, 'nickname': nickname, title:"공지사항 글 쓰기"})
}
})
router.post('/write/notice', function(req,res,next){
var ip = requestIp.getClientIp(req);
var nickname = req.user.nickname // var name = req.body.name
var title = req.body.title
var content = req.body.content
var ID = req.user.ID
var datas = [nickname, title, content, ID]
var sql = "insert into notice_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);
});
var idx_;
var sql_ = "select max(idx) as idx from notice_board"
board.query(sql_, function(err, rows){
if(err) console.error("err : " + err);
idx_ = rows[0].idx;
if(!idx_) // 글이 없으면 NULL
idx_ = 1;
console.log(logString+req.user.ID+'('+nickname+') 유저가 공지사항 '+idx_+'번 게시글을 작성했습니다.('+ip+')')
res.redirect('/board/read/notice/'+idx_);
});
})
router.get('/read/notice/:idx', function(req,res,next){
var ip = requestIp.getClientIp(req);
var idx = req.params.idx
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 notice_board where idx=?";
board.query(sql, [idx], function(err,row){
if(err) console.error(err)
var id = req.user;
if(!id){
console.log(logString+'익명 유저의 공지사항 '+idx+'번 게시물 접근을 거부했습니다.('+ip+')')
res.redirect('/login')
}
else{
var id = req.user.ID;
var nickname = req.user.nickname;
// 조회수 증가
var sql_ = 'update notice_board set hit=hit+1 where idx="'+idx+'"';
board.query(sql_, function(err, row){
if(err) console.error(err)
})
var sql_comment = "select idx, nickname, comment from notice_comment where bulletin_id =?"
board.query(sql_comment, [idx], function(err,comment){
if (err) console.error("err : " + err);
res.render('read.ejs', {'ID':id, 'nickname': nickname, title:"공지사항 글 상세", row:row[0], comment:comment, comment_length : comment.length, usernick:req.user.nickname})
})
console.log(logString+req.user.ID+'('+nickname+') 유저가 공지사항 '+idx+'번 게시글을 보고있습니다.('+ip+')')
}
})
})
router.post('/read/notice/commentwrite', function(req,res,next){
var ip = requestIp.getClientIp(req);
var idx = req.body.idx;
var nickname = req.user.nickname // var name = req.body.name
var comment = req.body.comment
var ID = req.user.ID
var datas = [ID, nickname, comment, idx]
var sql = "insert into notice_comment(ID, nickname, comment, bulletin_id) values(?, ?, ?, ?)"
board.query(sql, datas, function(err,row){
if (err) console.error("err : " + err);
})
console.log(logString+req.user.ID+'('+nickname+') 유저가 공지사항 '+idx+'번 게시물에 댓글을 작성했습니다.('+ip+')')
res.redirect('/board/read/notice/'+idx);
})
router.post('/read/notice/commentdelete', function(req,res,next){
var ip = requestIp.getClientIp(req);
var idx = req.body.idxcomment;
var idxbulletin = (req.headers.referer).split('/')[6];
var ID = req.user.ID;
var datas = [ID, idx]
var sql = "delete from notice_comment where ID =? and idx=?"
board.query(sql,datas,function(err,result){
if(err) console.error(err)
// 삭제를 요청한 사용자가 작성자가 아닌 경우
if(result.affectedRows == 0){
// 운영자세요?
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 notice_comment where idx="'+idx+'"';
board.query(sqlAdmin, function(err__, result__){
if(err__) console.error(err__)
var nickname = req.user.nickname;
console.log(logString+"[Admin] "+req.user.ID+'('+nickname+') 유저가 공지사항 '+idxbulletin+'번 글에서 '+idx+'번 댓글을 삭제했습니다.('+ip+')')
res.redirect('/board/read/notice/'+idxbulletin)
})
}
else{ // 작성자도, 운영자도 아니면
var nickname = req.user.nickname;
console.log(logString+req.user.ID+'('+nickname+') 유저의 공지사항 '+idxbulletin+'번 글의 '+idx+'번 댓글 삭제를 거부했습니다.(권한없음 // '+ip+')')
res.send("<script>alert('댓글 작성자가 아닙니다');history.back();</script>");
}
})
}
else{ // 작성자인 경우
var nickname = req.user.nickname;
console.log(logString+req.user.ID+'('+nickname+') 유저가 공지사항 '+idxbulletin+'번 글에서 '+idx+'번 댓글을 삭제했습니다.('+ip+')')
res.redirect('/board/read/notice/'+idxbulletin)
}
})
})
router.post('/update/notice', function(req,res,next){
var ip = requestIp.getClientIp(req);
var ID = req.user.ID;
var idx = req.body.idx
var title = req.body.title
var content = req.body.content
var datas = [title, content, idx, ID]
var sql = "update notice_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){
console.log(logString+req.user.ID+'('+req.user.nickname+') 유저의 공지사항 '+idx+'번 게시글 수정을 거부했습니다.(권한없음 // '+ip+')')
res.send("<script>alert('게시글 작성자가 아닙니다.');history.back();</script>")
}
else{
var id = req.user.ID;
var nickname = req.user.nickname;
console.log(logString+req.user.ID+'('+nickname+') 유저가 공지사항 '+idx+'번 게시글을 수정했습니다.('+ip+')')
res.redirect('/board/read/notice/'+idx)
}
})
})
router.post('/delete/notice', function(req,res,next){
var ip = requestIp.getClientIp(req);
var idx = req.body.idx
var ID = req.user.ID;
var datas = [idx,ID]
var sql = "delete from notice_board where idx=? and ID=?"
board.query(sql,datas, function(err,result){
if(err) console.error(err)
// 삭제를 요청한 사용자가 작성자가 아닌 경우
if(result.affectedRows == 0){
// 운영자세요?
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 notice_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/notice/';</script>");
console.log(logString+"[Admin] "+req.user.ID+'('+nickname+') 유저가 공지사항 '+idx+'번 게시글을 삭제했습니다.('+ip+')')
})
}
else{ // 작성자도, 운영자도 아니면
var nickname = req.user.nickname;
console.log(logString+req.user.ID+'('+nickname+') 유저의 공지사항 '+idx+'번 게시글 삭제를 거부했습니다.(권한없음 // '+ip+')')
res.send("<script>alert('게시글 작성자가 아닙니다');history.back();</script>");
}
})
}
else{ // 작성자인 경우
var id = req.user.ID;
var nickname = req.user.nickname;
res.send("<script>alert('게시글이 삭제되었습니다.');window.location.href='/board/list/notice/';</script>");
console.log(logString+req.user.ID+'('+nickname+') 유저가 공지사항 '+idx+'번 게시글을 삭제했습니다.('+ip+')')
}
})
})
// 작곡가 구인
router.get('/list/composer/:page', function(req, res, next) {
var ip = requestIp.getClientIp(req);
var id = req.user;
if(!id){
console.log(logString+'익명 유저의 작곡가 구인 게시판 접근을 거부했습니다.('+ip+')')
res.redirect('/board/list/composer/1')
}
else{
var page = req.params.page;
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 composer_board order by idx desc";
board.query(sql, function(err,rows) {
if (err) console.error("err : " + err);
var id = req.user.ID;
var nickname = req.user.nickname;
console.log(logString+req.user.ID+'('+nickname+') 유저가 작곡가 구인 게시판을 보고있습니다.('+ip+')')
res.render('list.ejs', {'ID':id, 'nickname': nickname, title: '작곡가 구인', rows: rows, page:page, length:rows.length-1,page_num:10,pass:true})
})
}
});
router.get('/composer', function(req,res,next){
var ip = requestIp.getClientIp(req);
var id = req.user;
if(!id){
console.log(logString+'익명 유저의 작곡가 구인 게시판 접근을 거부했습니다.('+ip+')')
res.sendFile(path.join(__dirname, "../../public/login.html"))
}
else res.redirect('/board/list/composer/1')
})
router.get('/list/composer', function(req,res,next){
var ip = requestIp.getClientIp(req);
var id = req.user;
if(!id){
console.log(logString+'익명 유저의 작곡가 구인 게시판 접근을 거부했습니다.('+ip+')')
res.sendFile(path.join(__dirname, "../../public/login.html"))
}
else res.redirect('/board/list/composer/1')
})
router.get('/write/composer', function(req,res,next){
var ip = requestIp.getClientIp(req);
var id = req.user;
if(!id){
console.log(logString+'익명 유저의 작곡가 구인 글쓰기 시도를 거부했습니다.('+ip+')')
res.sendFile(path.join(__dirname, "../../public/login.html"))
}
else{
var id = req.user.ID;
var nickname = req.user.nickname;
console.log(logString+req.user.ID+'('+nickname+') 유저가 작곡가 구인 게시글 작성 중입니다.('+ip+')')
res.render('write.ejs', {'ID':id, 'nickname': nickname, title:"작곡가 구인 글 쓰기"})
}
})
router.post('/write/composer', function(req,res,next){
var ip = requestIp.getClientIp(req);
var nickname = req.user.nickname // var name = req.body.name
var title = req.body.title
var content = req.body.content
var ID = req.user.ID
var datas = [nickname, title, content, ID]
var sql = "insert into composer_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);
});
var idx_;
var sql_ = "select max(idx) as idx from composer_board"
board.query(sql_, function(err, rows){
if(err) console.error("err : " + err);
idx_ = rows[0].idx;
if(!idx_) // 글이 없으면 NULL
idx_ = 1;
console.log(logString+req.user.ID+'('+nickname+') 유저가 작곡가 구인 '+idx_+'번 게시글을 작성했습니다.('+ip+')')
res.redirect('/board/read/composer/'+idx_);
});
})
router.get('/read/composer/:idx', function(req,res,next){
var ip = requestIp.getClientIp(req);
var idx = req.params.idx
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 composer_board where idx=?";
board.query(sql, [idx], function(err,row){
if(err) console.error(err)
var id = req.user;
if(!id){
console.log(logString+'익명 유저의 작곡가 구인 '+idx+'번 게시물 접근을 거부했습니다.('+ip+')')
res.redirect('/login')
}
else{
var id = req.user.ID;
var nickname = req.user.nickname;
// 조회수 증가
var sql_ = 'update composer_board set hit=hit+1 where idx="'+idx+'"';
board.query(sql_, function(err, row){
if(err) console.error(err)
})
var sql_comment = "select idx, nickname, comment from composer_comment where bulletin_id =?"
board.query(sql_comment, [idx], function(err,comment){
if (err) console.error("err : " + err);
res.render('read.ejs', {'ID':id, 'nickname': nickname, title:"작곡가 구인 글 상세", row:row[0], comment:comment, comment_length : comment.length, usernick:req.user.nickname})
})
console.log(logString+req.user.ID+'('+nickname+') 유저가 작곡가 구인 '+idx+'번 게시글을 보고있습니다.('+ip+')')
}
})
})
router.post('/read/composer/commentwrite', function(req,res,next){
var ip = requestIp.getClientIp(req);
var idx = req.body.idx;
var nickname = req.user.nickname // var name = req.body.name
var comment = req.body.comment
var ID = req.user.ID
var datas = [ID, nickname, comment, idx]
var sql = "insert into composer_comment(ID, nickname, comment, bulletin_id) values(?, ?, ?, ?)"
board.query(sql, datas, function(err,row){
if (err) console.error("err : " + err);
})
console.log(logString+req.user.ID+'('+nickname+') 유저가 작곡가 구인 '+idx+'번 게시물에 댓글을 작성했습니다.('+ip+')')
res.redirect('/board/read/composer/'+idx);
})
router.post('/read/composer/commentdelete', function(req,res,next){
var ip = requestIp.getClientIp(req);
var idx = req.body.idxcomment;
var idxbulletin = (req.headers.referer).split('/')[6];
var ID = req.user.ID;
var datas = [ID, idx]
var sql = "delete from composer_comment where ID =? and idx=?"
board.query(sql,datas,function(err,result){
if(err) console.error(err)
// 삭제를 요청한 사용자가 작성자가 아닌 경우
if(result.affectedRows == 0){
// 운영자세요?
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 ncomposer_comment where idx="'+idx+'"';
board.query(sqlAdmin, function(err__, result__){
if(err__) console.error(err__)
var nickname = req.user.nickname;
console.log(logString+"[Admin] "+req.user.ID+'('+nickname+') 유저가 작곡가 구인 '+idxbulletin+'번 글에서 '+idx+'번 댓글을 삭제했습니다.('+ip+')')
res.redirect('/board/read/composer/'+idxbulletin)
})
}
else{ // 작성자도, 운영자도 아니면
var nickname = req.user.nickname;
console.log(logString+req.user.ID+'('+nickname+') 유저의 작곡가 구인 '+idxbulletin+'번 글의 '+idx+'번 댓글 삭제를 거부했습니다.(권한없음 // '+ip+')')
res.send("<script>alert('댓글 작성자가 아닙니다');history.back();</script>");
}
})
}
else{ // 작성자인 경우
var nickname = req.user.nickname;
console.log(logString+req.user.ID+'('+nickname+') 유저가 작곡가 구인 '+idxbulletin+'번 글에서 '+idx+'번 댓글을 삭제했습니다.('+ip+')')
res.redirect('/board/read/composer/'+idxbulletin)
}
})
})
router.post('/update/composer', function(req,res,next){
var ip = requestIp.getClientIp(req);
var ID = req.user.ID;
var idx = req.body.idx
var title = req.body.title
var content = req.body.content
var datas = [title, content, idx, ID]
var sql = "update composer_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){
console.log(logString+req.user.ID+'('+req.user.nickname+') 유저의 작곡가 구인 '+idx+'번 게시글 수정을 거부했습니다.(권한없음 // '+ip+')')
res.send("<script>alert('게시글 작성자가 아닙니다.');history.back();</script>")
}
else{
var id = req.user.ID;
var nickname = req.user.nickname;
console.log(logString+req.user.ID+'('+nickname+') 유저가 작곡가 구인 '+idx+'번 게시글을 수정했습니다.('+ip+')')
res.redirect('/board/read/composer/'+idx)
}
})
})
router.post('/delete/composer', function(req,res,next){
var ip = requestIp.getClientIp(req);
var idx = req.body.idx
var ID = req.user.ID;
var datas = [idx,ID]
var sql = "delete from composer_board where idx=? and ID=?"
board.query(sql,datas, function(err,result){
if(err) console.error(err)
// 삭제를 요청한 사용자가 작성자가 아닌 경우
if(result.affectedRows == 0){
// 운영자세요?
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 composer_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/composer/';</script>");
console.log(logString+"[Admin] "+req.user.ID+'('+nickname+') 유저가 작곡가 구인 '+idx+'번 게시글을 삭제했습니다.('+ip+')')
})
}
else{ // 작성자도, 운영자도 아니면
var nickname = req.user.nickname;
console.log(logString+req.user.ID+'('+nickname+') 유저의 작곡가 구인 '+idx+'번 게시글 삭제를 거부했습니다.(권한없음 // '+ip+')')
res.send("<script>alert('게시글 작성자가 아닙니다');history.back();</script>");
}
})
}
else{ // 작성자인 경우
var id = req.user.ID;
var nickname = req.user.nickname;
res.send("<script>alert('게시글이 삭제되었습니다.');window.location.href='/board/list/composer/';</script>");
console.log(logString+req.user.ID+'('+nickname+') 유저가 작곡가 구인 '+idx+'번 게시글을 삭제했습니다.('+ip+')')
}
})
})
// 가수 구인
router.get('/list/singer/:page', function(req, res, next) {
var ip = requestIp.getClientIp(req);
var id = req.user;
if(!id){
console.log(logString+'익명 유저의 가수 구인 게시판 접근을 거부했습니다.('+ip+')')
res.redirect('/board/list/singer/1')
}
else{
var page = req.params.page;
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 singer_board order by idx desc";
board.query(sql, function(err,rows) {
if (err) console.error("err : " + err);
var id = req.user.ID;
var nickname = req.user.nickname;
console.log(logString+req.user.ID+'('+nickname+') 유저가 가수 구인 게시판을 보고있습니다.('+ip+')')
res.render('list.ejs', {'ID':id, 'nickname': nickname, title: '가수 구인', rows: rows, page:page, length:rows.length-1,page_num:10,pass:true})
})
}
});
router.get('/singer', function(req,res,next){
var ip = requestIp.getClientIp(req);
var id = req.user;
if(!id){
console.log(logString+'익명 유저의 가수 구인 게시판 접근을 거부했습니다.('+ip+')')
res.sendFile(path.join(__dirname, "../../public/login.html"))
}
else res.redirect('/board/list/singer/1')
})
router.get('/list/singer', function(req,res,next){
var ip = requestIp.getClientIp(req);
var id = req.user;
if(!id){
console.log(logString+'익명 유저의 가수 구인 게시판 접근을 거부했습니다.('+ip+')')
res.sendFile(path.join(__dirname, "../../public/login.html"))
}
else res.redirect('/board/list/singer/1')
})
router.get('/write/singer', function(req,res,next){
var ip = requestIp.getClientIp(req);
var id = req.user;
if(!id){
console.log(logString+'익명 유저의 가수 구인 글쓰기 시도를 거부했습니다.('+ip+')')
res.sendFile(path.join(__dirname, "../../public/login.html"))
}
else{
var id = req.user.ID;
var nickname = req.user.nickname;
console.log(logString+req.user.ID+'('+nickname+') 유저가 가수 구인 게시글 작성 중입니다.('+ip+')')
res.render('write.ejs', {'ID':id, 'nickname': nickname, title:"가수 구인 글 쓰기"})
}
})
router.post('/write/singer', function(req,res,next){
var ip = requestIp.getClientIp(req);
var nickname = req.user.nickname // var name = req.body.name
var title = req.body.title
var content = req.body.content
var ID = req.user.ID
var datas = [nickname, title, content, ID]
var sql = "insert into singer_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);
});
var idx_;
var sql_ = "select max(idx) as idx from singer_board"
board.query(sql_, function(err, rows){
if(err) console.error("err : " + err);
idx_ = rows[0].idx;
if(!idx_) // 글이 없으면 NULL
idx_ = 1;
console.log(logString+req.user.ID+'('+nickname+') 유저가 가수 구인 '+idx_+'번 게시글을 작성했습니다.('+ip+')')
res.redirect('/board/read/singer/'+idx_);
});
})
router.get('/read/singer/:idx', function(req,res,next){
var ip = requestIp.getClientIp(req);
var idx = req.params.idx
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 singer_board where idx=?";
board.query(sql, [idx], function(err,row){
if(err) console.error(err)
var id = req.user;
if(!id){
console.log(logString+'익명 유저의 '+idx+'번 가수 구인 게시물 접근을 거부했습니다.('+ip+')')
res.redirect('/login')
}
else{
var id = req.user.ID;
var nickname = req.user.nickname;
// 조회수 증가
var sql_ = 'update singer_board set hit=hit+1 where idx="'+idx+'"';
board.query(sql_, function(err, row){
if(err) console.error(err)
})
var sql_comment = "select idx, nickname, comment from singer_comment where bulletin_id =?"
board.query(sql_comment, [idx], function(err,comment){
if (err) console.error("err : " + err);
res.render('read.ejs', {'ID':id, 'nickname': nickname, title:"가수 구인 글 상세", row:row[0], comment:comment, comment_length : comment.length, usernick:req.user.nickname})
})
console.log(logString+req.user.ID+'('+nickname+') 유저가 가수 구인 '+idx+'번 게시글을 보고있습니다.('+ip+')')
}
})
})
router.post('/read/singer/commentwrite', function(req,res,next){
var ip = requestIp.getClientIp(req);
var idx = req.body.idx;
var nickname = req.user.nickname // var name = req.body.name
var comment = req.body.comment
var ID = req.user.ID
var datas = [ID, nickname, comment, idx]
var sql = "insert into singer_comment(ID, nickname, comment, bulletin_id) values(?, ?, ?, ?)"
board.query(sql, datas, function(err,row){
if (err) console.error("err : " + err);
})
console.log(logString+req.user.ID+'('+nickname+') 유저가 가수 구인 '+idx+'번 게시물에 댓글을 작성했습니다.('+ip+')')
res.redirect('/board/read/singer/'+idx);
})
router.post('/read/singer/commentdelete', function(req,res,next){
var ip = requestIp.getClientIp(req);
var idx = req.body.idxcomment;
var idxbulletin = (req.headers.referer).split('/')[6];
var ID = req.user.ID;
var datas = [ID, idx]
var sql = "delete from singer_comment where ID =? and idx=?"
board.query(sql,datas,function(err,result){
if(err) console.error(err)
// 삭제를 요청한 사용자가 작성자가 아닌 경우
if(result.affectedRows == 0){
// 운영자세요?
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 nsinger_comment where idx="'+idx+'"';
board.query(sqlAdmin, function(err__, result__){
if(err__) console.error(err__)
var nickname = req.user.nickname;
console.log(logString+"[Admin] "+req.user.ID+'('+nickname+') 유저가 가수 구인 '+idxbulletin+'번 글에서 '+idx+'번 댓글을 삭제했습니다.('+ip+')')
res.redirect('/board/read/singer/'+idxbulletin)
})
}
else{ // 작성자도, 운영자도 아니면
var nickname = req.user.nickname;
console.log(logString+req.user.ID+'('+nickname+') 유저의 가수 구인 '+idxbulletin+'번 글의 '+idx+'번 댓글 삭제를 거부했습니다.(권한없음 // '+ip+')')
res.send("<script>alert('댓글 작성자가 아닙니다');history.back();</script>");
}
})
}
else{ // 작성자인 경우
var nickname = req.user.nickname;
console.log(logString+req.user.ID+'('+nickname+') 유저가 가수 구인 '+idxbulletin+'번 글에서 '+idx+'번 댓글을 삭제했습니다.('+ip+')')
res.redirect('/board/read/singer/'+idxbulletin)
}
})
})
router.post('/update/singer', function(req,res,next){
var ip = requestIp.getClientIp(req);
var ID = req.user.ID;
var idx = req.body.idx
var title = req.body.title
var content = req.body.content
var datas = [title, content, idx, ID]
var sql = "update singer_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){
console.log(logString+req.user.ID+'('+req.user.nickname+') 유저의 가수 구인 '+idx+'번 게시글 수정을 거부했습니다.(권한없음 // '+ip+')')
res.send("<script>alert('게시글 작성자가 아닙니다.');history.back();</script>")
}
else{
var id = req.user.ID;
var nickname = req.user.nickname;
console.log(logString+req.user.ID+'('+nickname+') 유저가 가수 구인 '+idx+'번 게시글을 수정했습니다.('+ip+')')
res.redirect('/board/read/singer/'+idx)
}
})
})
router.post('/delete/singer', function(req,res,next){
var ip = requestIp.getClientIp(req);
var idx = req.body.idx
var ID = req.user.ID;
var datas = [idx,ID]
var sql = "delete from singer_board where idx=? and ID=?"
board.query(sql,datas, function(err,result){
if(err) console.error(err)
// 삭제를 요청한 사용자가 작성자가 아닌 경우
if(result.affectedRows == 0){
// 운영자세요?
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 singer_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/singer/';</script>");
console.log(logString+"[Admin] "+req.user.ID+'('+nickname+') 유저가 가수 구인 '+idx+'번 게시글을 삭제했습니다.('+ip+')')
})
}
else{ // 작성자도, 운영자도 아니면
var nickname = req.user.nickname;
console.log(logString+req.user.ID+'('+nickname+') 유저의 가수 구인 '+idx+'번 게시글 삭제를 거부했습니다.(권한없음 // '+ip+')')
res.send("<script>alert('게시글 작성자가 아닙니다');history.back();</script>");
}
})
}
else{ // 작성자인 경우
var id = req.user.ID;
var nickname = req.user.nickname;
res.send("<script>alert('게시글이 삭제되었습니다.');window.location.href='/board/list/singer/';</script>");
console.log(logString+req.user.ID+'('+nickname+') 유저가 가수 구인 '+idx+'번 게시글을 삭제했습니다.('+ip+')')
}
})
})
// 자유게시판
router.get('/list/free/:page', function(req, res, next) {
var ip = requestIp.getClientIp(req);
var id = req.user;
if(!id){
console.log(logString+'익명 유저의 자유게시판 접근을 거부했습니다.('+ip+')')
res.redirect('/board/list/free/1')
}
else{
var page = req.params.page;
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";
"date_format(regdate,'%Y-%m-%d %H:%i:%s') regdate, hit from free_board order by idx desc";
board.query(sql, function(err,rows) {
if (err) console.error("err : " + err);
var id = req.user.ID;
var nickname = req.user.nickname;
console.log(logString+req.user.ID+'('+nickname+') 유저가 게시판을 보고있습니다.('+ip+')')
res.render('list.ejs', {'ID':id, 'nickname': nickname, title: '게시판 리스트', rows: rows, page:page, length:rows.length-1,page_num:10,pass:true})
console.log(logString+req.user.ID+'('+nickname+') 유저가 자유게시판을 보고있습니다.('+ip+')')
res.render('list.ejs', {'ID':id, 'nickname': nickname, title: '자유게시판', rows: rows, page:page, length:rows.length-1,page_num:10,pass:true})
})
}
});
router.get('/list', function(req,res,next){
router.get('/free', function(req,res,next){
var ip = requestIp.getClientIp(req);
var id = req.user;
if(!id){
console.log(logString+'익명 유저의 자유게시판 접근을 거부했습니다.('+ip+')')
res.sendFile(path.join(__dirname, "../../public/login.html"))
}
else res.redirect('/board/list/free/1')
})
router.get('/list/free', function(req,res,next){
var ip = requestIp.getClientIp(req);
var id = req.user;
if(!id){
console.log(logString+'익명 유저의 게시판 접근을 거부했습니다.('+ip+')')
console.log(logString+'익명 유저의 자유게시판 접근을 거부했습니다.('+ip+')')
res.sendFile(path.join(__dirname, "../../public/login.html"))
}
else res.redirect('/board/list/1')
else res.redirect('/board/list/free/1')
})
router.get('/write', function(req,res,next){
router.get('/write/free', function(req,res,next){
var ip = requestIp.getClientIp(req);
var id = req.user;
if(!id){
console.log(logString+'익명 유저의 글쓰기 시도를 거부했습니다.('+ip+')')
console.log(logString+'익명 유저의 자유게시판 글쓰기 시도를 거부했습니다.('+ip+')')
res.sendFile(path.join(__dirname, "../../public/login.html"))
}
else{
var id = req.user.ID;
var nickname = req.user.nickname;
console.log(logString+req.user.ID+'('+nickname+') 유저가 게시글 작성 중입니다.('+ip+')')
res.render('write.ejs', {'ID':id, 'nickname': nickname, title:"게시판 글 쓰기"})
console.log(logString+req.user.ID+'('+nickname+') 유저가 자유게시판 게시글 작성 중입니다.('+ip+')')
res.render('write.ejs', {'ID':id, 'nickname': nickname, title:"자유게시판 글 쓰기"})
}
})
router.post('/write', function(req,res,next){
router.post('/write/free', function(req,res,next){
var ip = requestIp.getClientIp(req);
var nickname = req.user.nickname // var name = req.body.name
var title = req.body.title
......@@ -82,13 +829,13 @@ router.post('/write', function(req,res,next){
var ID = req.user.ID
var datas = [nickname, title, content, ID]
var sql = "insert into board(nickname, title, content, regdate, modidate, hit, ID) values(?,?,?,now(),now(),0, ?)";
var sql = "insert into free_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);
});
var idx_;
var sql_ = "select max(idx) as idx from board"
var sql_ = "select max(idx) as idx from free_board"
board.query(sql_, function(err, rows){
if(err) console.error("err : " + err);
idx_ = rows[0].idx;
......@@ -96,23 +843,23 @@ router.post('/write', function(req,res,next){
if(!idx_) // 글이 없으면 NULL
idx_ = 1;
console.log(logString+req.user.ID+'('+nickname+') 유저가 '+idx_+'번 게시글을 작성했습니다.('+ip+')')
res.redirect('/board/read/'+idx_);
console.log(logString+req.user.ID+'('+nickname+') 유저가 자유게시판 '+idx_+'번 게시글을 작성했습니다.('+ip+')')
res.redirect('/board/read/free/'+idx_);
});
})
router.get('/read/:idx', function(req,res,next){
router.get('/read/free/:idx', function(req,res,next){
var ip = requestIp.getClientIp(req);
var idx = req.params.idx
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=?";
"date_format(regdate,'%Y-%m-%d %H:%i:%s') regdate, hit, ID from free_board where idx=?";
board.query(sql, [idx], function(err,row){
if(err) console.error(err)
var id = req.user;
if(!id){
console.log(logString+'익명 유저의 '+idx+'번 게시물 접근을 거부했습니다.('+ip+')')
console.log(logString+'익명 유저의 자유게시판 '+idx+'번 게시물 접근을 거부했습니다.('+ip+')')
res.redirect('/login')
}
else{
......@@ -120,22 +867,22 @@ router.get('/read/:idx', function(req,res,next){
var nickname = req.user.nickname;
// 조회수 증가
var sql_ = 'update board set hit=hit+1 where idx="'+idx+'"';
var sql_ = 'update free_board set hit=hit+1 where idx="'+idx+'"';
board.query(sql_, function(err, row){
if(err) console.error(err)
})
var sql_comment = "select idx, nickname, comment from comment where bulletin_id =?"
var sql_comment = "select idx, nickname, comment from free_comment where bulletin_id =?"
board.query(sql_comment, [idx], function(err,comment){
if (err) console.error("err : " + err);
res.render('read.ejs', {'ID':id, 'nickname': nickname, title:"글 상세", row:row[0], comment:comment, comment_length : comment.length, usernick:req.user.nickname})
res.render('read.ejs', {'ID':id, 'nickname': nickname, title:"자유게시판 글 상세", row:row[0], comment:comment, comment_length : comment.length, usernick:req.user.nickname})
})
console.log(logString+req.user.ID+'('+nickname+') 유저가 '+idx+'번 게시글을 보고있습니다.('+ip+')')
console.log(logString+req.user.ID+'('+nickname+') 유저가 자유게시판 '+idx+'번 게시글을 보고있습니다.('+ip+')')
}
})
})
router.post('/read/commentwrite', function(req,res,next){
router.post('/read/free/commentwrite', function(req,res,next){
var ip = requestIp.getClientIp(req);
var idx = req.body.idx;
var nickname = req.user.nickname // var name = req.body.name
......@@ -143,22 +890,22 @@ router.post('/read/commentwrite', function(req,res,next){
var ID = req.user.ID
var datas = [ID, nickname, comment, idx]
var sql = "insert into comment(ID, nickname, comment, bulletin_id) values(?, ?, ?, ?)"
var sql = "insert into free_comment(ID, nickname, comment, bulletin_id) values(?, ?, ?, ?)"
board.query(sql, datas, function(err,row){
if (err) console.error("err : " + err);
})
console.log(logString+req.user.ID+'('+nickname+') 유저가 '+idx+'번 게시물에 댓글을 작성했습니다.('+ip+')')
res.redirect('/board/read/'+idx);
console.log(logString+req.user.ID+'('+nickname+') 유저가 자유게시판 '+idx+'번 게시물에 댓글을 작성했습니다.('+ip+')')
res.redirect('/board/read/free/'+idx);
})
router.post('/read/commentdelete', function(req,res,next){
router.post('/read/free/commentdelete', function(req,res,next){
var ip = requestIp.getClientIp(req);
var idx = req.body.idxcomment;
var idxbulletin = (req.headers.referer).split('/')[5];
var idxbulletin = (req.headers.referer).split('/')[6];
var ID = req.user.ID;
var datas = [ID, idx]
var sql = "delete from comment where ID =? and idx=?"
var sql = "delete from free_comment where ID =? and idx=?"
board.query(sql,datas,function(err,result){
if(err) console.error(err)
// 삭제를 요청한 사용자가 작성자가 아닌 경우
......@@ -169,32 +916,273 @@ router.post('/read/commentdelete', function(req,res,next){
if(err_) console.error(err_)
if(result_[0].type == "운영자"){ // 작성자는 아니나 유저 타입이 운영자인 경우
var sqlAdmin = 'delete from comment where idx="'+idx+'"';
var sqlAdmin = 'delete from nfree_comment where idx="'+idx+'"';
board.query(sqlAdmin, function(err__, result__){
if(err__) console.error(err__)
var nickname = req.user.nickname;
console.log(logString+"[Admin] "+req.user.ID+'('+nickname+') 유저가 '+idxbulletin+'번 글에서 '+idx+'번 댓글을 삭제했습니다.('+ip+')')
res.redirect('/board/read/'+idxbulletin)
console.log(logString+"[Admin] "+req.user.ID+'('+nickname+') 유저가 자유게시판 '+idxbulletin+'번 글에서 '+idx+'번 댓글을 삭제했습니다.('+ip+')')
res.redirect('/board/read/free/'+idxbulletin)
})
}
else{ // 작성자도, 운영자도 아니면
var nickname = req.user.nickname;
console.log(logString+req.user.ID+'('+nickname+') 유저의 '+idxbulletin+'번 글의 '+idx+'번 댓글 삭제를 거부했습니다.(권한없음 // '+ip+')')
console.log(logString+req.user.ID+'('+nickname+') 유저의 자유게시판 '+idxbulletin+'번 글의 '+idx+'번 댓글 삭제를 거부했습니다.(권한없음 // '+ip+')')
res.send("<script>alert('댓글 작성자가 아닙니다');history.back();</script>");
}
})
}
else{ // 작성자인 경우
var nickname = req.user.nickname;
console.log(logString+req.user.ID+'('+nickname+') 유저가 '+idxbulletin+'번 글에서 '+idx+'번 댓글을 삭제했습니다.('+ip+')')
res.redirect('/board/read/'+idxbulletin)
console.log(logString+req.user.ID+'('+nickname+') 유저가 자유게시판 '+idxbulletin+'번 글에서 '+idx+'번 댓글을 삭제했습니다.('+ip+')')
res.redirect('/board/read/free/'+idxbulletin)
}
})
})
router.post('/update/free', function(req,res,next){
var ip = requestIp.getClientIp(req);
var ID = req.user.ID;
var idx = req.body.idx
var title = req.body.title
var content = req.body.content
var datas = [title, content, idx, ID]
var sql = "update free_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){
console.log(logString+req.user.ID+'('+req.user.nickname+') 유저의 자유게시판 '+idx+'번 게시글 수정을 거부했습니다.(권한없음 // '+ip+')')
res.send("<script>alert('게시글 작성자가 아닙니다.');history.back();</script>")
}
else{
var id = req.user.ID;
var nickname = req.user.nickname;
console.log(logString+req.user.ID+'('+nickname+') 유저가 자유게시판 '+idx+'번 게시글을 수정했습니다.('+ip+')')
res.redirect('/board/read/free/'+idx)
}
})
})
router.post('/delete/free', function(req,res,next){
var ip = requestIp.getClientIp(req);
var idx = req.body.idx
var ID = req.user.ID;
var datas = [idx,ID]
var sql = "delete from free_board where idx=? and ID=?"
board.query(sql,datas, function(err,result){
if(err) console.error(err)
// 삭제를 요청한 사용자가 작성자가 아닌 경우
if(result.affectedRows == 0){
// 운영자세요?
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 free_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/free/';</script>");
console.log(logString+"[Admin] "+req.user.ID+'('+nickname+') 유저가 자유게시판 '+idx+'번 게시글을 삭제했습니다.('+ip+')')
})
}
else{ // 작성자도, 운영자도 아니면
var nickname = req.user.nickname;
console.log(logString+req.user.ID+'('+nickname+') 유저의 자유게시판 '+idx+'번 게시글 삭제를 거부했습니다.(권한없음 // '+ip+')')
res.send("<script>alert('게시글 작성자가 아닙니다');history.back();</script>");
}
})
}
else{ // 작성자인 경우
var id = req.user.ID;
var nickname = req.user.nickname;
res.send("<script>alert('게시글이 삭제되었습니다.');window.location.href='/board/list/free/';</script>");
console.log(logString+req.user.ID+'('+nickname+') 유저가 자유게시판 '+idx+'번 게시글을 삭제했습니다.('+ip+')')
}
})
})
// 건의사항
router.get('/list/suggestion/:page', function(req, res, next) {
var ip = requestIp.getClientIp(req);
var id = req.user;
if(!id){
console.log(logString+'익명 유저의 건의사항 게시판 접근을 거부했습니다.('+ip+')')
res.redirect('/board/list/suggestion/1')
}
else{
var page = req.params.page;
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 suggestion_board order by idx desc";
board.query(sql, function(err,rows) {
if (err) console.error("err : " + err);
var id = req.user.ID;
var nickname = req.user.nickname;
console.log(logString+req.user.ID+'('+nickname+') 유저가 건의사항 게시판을 보고있습니다.('+ip+')')
res.render('list.ejs', {'ID':id, 'nickname': nickname, title: '건의사항', rows: rows, page:page, length:rows.length-1,page_num:10,pass:true})
})
}
});
router.get('/suggestion', function(req,res,next){
var ip = requestIp.getClientIp(req);
var id = req.user;
if(!id){
console.log(logString+'익명 유저의 건의사항 게시판 접근을 거부했습니다.('+ip+')')
res.sendFile(path.join(__dirname, "../../public/login.html"))
}
else res.redirect('/board/list/suggestion/1')
})
router.get('/list/suggestion', function(req,res,next){
var ip = requestIp.getClientIp(req);
var id = req.user;
if(!id){
console.log(logString+'익명 유저의 건의사항 게시판 접근을 거부했습니다.('+ip+')')
res.sendFile(path.join(__dirname, "../../public/login.html"))
}
else res.redirect('/board/list/suggestion/1')
})
router.get('/write/suggestion', function(req,res,next){
var ip = requestIp.getClientIp(req);
var id = req.user;
if(!id){
console.log(logString+'익명 유저의 건의사항 글쓰기 시도를 거부했습니다.('+ip+')')
res.sendFile(path.join(__dirname, "../../public/login.html"))
}
else{
var id = req.user.ID;
var nickname = req.user.nickname;
console.log(logString+req.user.ID+'('+nickname+') 유저가 건의사항 게시글 작성 중입니다.('+ip+')')
res.render('write.ejs', {'ID':id, 'nickname': nickname, title:"건의사항 글 쓰기"})
}
})
router.post('/write/suggestion', function(req,res,next){
var ip = requestIp.getClientIp(req);
var nickname = req.user.nickname // var name = req.body.name
var title = req.body.title
var content = req.body.content
var ID = req.user.ID
var datas = [nickname, title, content, ID]
var sql = "insert into suggestion_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);
});
var idx_;
var sql_ = "select max(idx) as idx from suggestion_board"
board.query(sql_, function(err, rows){
if(err) console.error("err : " + err);
idx_ = rows[0].idx;
if(!idx_) // 글이 없으면 NULL
idx_ = 1;
console.log(logString+req.user.ID+'('+nickname+') 유저가 건의사항 '+idx_+'번 게시글을 작성했습니다.('+ip+')')
res.redirect('/board/read/suggestion/'+idx_);
});
})
router.get('/read/suggestion/:idx', function(req,res,next){
var ip = requestIp.getClientIp(req);
var idx = req.params.idx
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 suggestion_board where idx=?";
board.query(sql, [idx], function(err,row){
if(err) console.error(err)
var id = req.user;
if(!id){
console.log(logString+'익명 유저의 '+idx+'번 건의사항 게시물 접근을 거부했습니다.('+ip+')')
res.redirect('/login')
}
else{
var id = req.user.ID;
var nickname = req.user.nickname;
// 조회수 증가
var sql_ = 'update suggestion_board set hit=hit+1 where idx="'+idx+'"';
board.query(sql_, function(err, row){
if(err) console.error(err)
})
var sql_comment = "select idx, nickname, comment from suggestion_comment where bulletin_id =?"
board.query(sql_comment, [idx], function(err,comment){
if (err) console.error("err : " + err);
res.render('read.ejs', {'ID':id, 'nickname': nickname, title:"건의사항 글 상세", row:row[0], comment:comment, comment_length : comment.length, usernick:req.user.nickname})
})
console.log(logString+req.user.ID+'('+nickname+') 유저가 건의사항 '+idx+'번 게시글을 보고있습니다.('+ip+')')
}
})
})
router.post('/read/suggestion/commentwrite', function(req,res,next){
var ip = requestIp.getClientIp(req);
var idx = req.body.idx;
var nickname = req.user.nickname // var name = req.body.name
var comment = req.body.comment
var ID = req.user.ID
var datas = [ID, nickname, comment, idx]
var sql = "insert into suggestion_comment(ID, nickname, comment, bulletin_id) values(?, ?, ?, ?)"
board.query(sql, datas, function(err,row){
if (err) console.error("err : " + err);
})
console.log(logString+req.user.ID+'('+nickname+') 유저가 건의사항 '+idx+'번 게시물에 댓글을 작성했습니다.('+ip+')')
res.redirect('/board/read/suggestion/'+idx);
})
router.post('/read/suggestion/commentdelete', function(req,res,next){
var ip = requestIp.getClientIp(req);
var idx = req.body.idxcomment;
var idxbulletin = (req.headers.referer).split('/')[6];
var ID = req.user.ID;
var datas = [ID, idx]
var sql = "delete from suggestion_comment where ID =? and idx=?"
board.query(sql,datas,function(err,result){
if(err) console.error(err)
// 삭제를 요청한 사용자가 작성자가 아닌 경우
if(result.affectedRows == 0){
// 운영자세요?
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 nsuggestion_comment where idx="'+idx+'"';
board.query(sqlAdmin, function(err__, result__){
if(err__) console.error(err__)
var nickname = req.user.nickname;
console.log(logString+"[Admin] "+req.user.ID+'('+nickname+') 유저가 건의사항 '+idxbulletin+'번 글에서 '+idx+'번 댓글을 삭제했습니다.('+ip+')')
res.redirect('/board/read/suggestion/'+idxbulletin)
})
}
else{ // 작성자도, 운영자도 아니면
var nickname = req.user.nickname;
console.log(logString+req.user.ID+'('+nickname+') 유저의 건의사항 '+idxbulletin+'번 글의 '+idx+'번 댓글 삭제를 거부했습니다.(권한없음 // '+ip+')')
res.send("<script>alert('댓글 작성자가 아닙니다');history.back();</script>");
}
})
}
else{ // 작성자인 경우
var nickname = req.user.nickname;
console.log(logString+req.user.ID+'('+nickname+') 유저가 건의사항 '+idxbulletin+'번 글에서 '+idx+'번 댓글을 삭제했습니다.('+ip+')')
res.redirect('/board/read/suggestion/'+idxbulletin)
}
})
})
router.post('/update', function(req,res,next){
router.post('/update/suggestion', function(req,res,next){
var ip = requestIp.getClientIp(req);
var ID = req.user.ID;
var idx = req.body.idx
......@@ -202,29 +1190,29 @@ router.post('/update', function(req,res,next){
var content = req.body.content
var datas = [title, content, idx, ID]
var sql = "update board set title=?,content=?,modidate=now() where idx =? and ID=?"
var sql = "update suggestion_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){
console.log(logString+req.user.ID+'('+req.user.nickname+') 유저의 '+idx+'번 게시글 수정을 거부했습니다.(권한없음 // '+ip+')')
console.log(logString+req.user.ID+'('+req.user.nickname+') 유저의 건의사항 '+idx+'번 게시글 수정을 거부했습니다.(권한없음 // '+ip+')')
res.send("<script>alert('게시글 작성자가 아닙니다.');history.back();</script>")
}
else{
var id = req.user.ID;
var nickname = req.user.nickname;
console.log(logString+req.user.ID+'('+nickname+') 유저가 '+idx+'번 게시글을 수정했습니다.('+ip+')')
res.redirect('/board/read/'+idx)
console.log(logString+req.user.ID+'('+nickname+') 유저가 건의사항 '+idx+'번 게시글을 수정했습니다.('+ip+')')
res.redirect('/board/read/suggestion/'+idx)
}
})
})
router.post('/delete', function(req,res,next){
router.post('/delete/suggestion', function(req,res,next){
var ip = requestIp.getClientIp(req);
var idx = req.body.idx
var ID = req.user.ID;
var datas = [idx,ID]
var sql = "delete from board where idx=? and ID=?"
var sql = "delete from suggestion_board where idx=? and ID=?"
board.query(sql,datas, function(err,result){
if(err) console.error(err)
// 삭제를 요청한 사용자가 작성자가 아닌 경우
......@@ -235,18 +1223,18 @@ router.post('/delete', function(req,res,next){
if(err_) console.error(err_)
if(result_[0].type == "운영자"){ // 작성자는 아니나 유저 타입이 운영자인 경우
var sqlAdmin = 'delete from board where idx="'+idx+'"';
var sqlAdmin = 'delete from suggestion_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(logString+"[Admin] "+req.user.ID+'('+nickname+') 유저가 '+idx+'번 게시글을 삭제했습니다.('+ip+')')
res.send("<script>alert('게시글이 운영자에 의해 삭제되었습니다.');window.location.href='/board/list/suggestion/';</script>");
console.log(logString+"[Admin] "+req.user.ID+'('+nickname+') 유저가 건의사항 '+idx+'번 게시글을 삭제했습니다.('+ip+')')
})
}
else{ // 작성자도, 운영자도 아니면
var nickname = req.user.nickname;
console.log(logString+req.user.ID+'('+nickname+') 유저의 '+idx+'번 게시글 삭제를 거부했습니다.(권한없음 // '+ip+')')
console.log(logString+req.user.ID+'('+nickname+') 유저의 건의사항 '+idx+'번 게시글 삭제를 거부했습니다.(권한없음 // '+ip+')')
res.send("<script>alert('게시글 작성자가 아닙니다');history.back();</script>");
}
})
......@@ -254,8 +1242,8 @@ router.post('/delete', function(req,res,next){
else{ // 작성자인 경우
var id = req.user.ID;
var nickname = req.user.nickname;
res.send("<script>alert('게시글이 삭제되었습니다.');window.location.href='/board/list/';</script>");
console.log(logString+req.user.ID+'('+nickname+') 유저가 '+idx+'번 게시글을 삭제했습니다.('+ip+')')
res.send("<script>alert('게시글이 삭제되었습니다.');window.location.href='/board/list/suggestion/';</script>");
console.log(logString+req.user.ID+'('+nickname+') 유저가 건의사항 '+idx+'번 게시글을 삭제했습니다.('+ip+')')
}
})
})
......
......@@ -22,7 +22,7 @@
<a class="navbar-brand" href="/main">묵호의 놀이터</a>
<ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0">
<li><a href="/about" class="nav-link px-2 link-dark">About</a></li>
<li><a href="/board/list" class="nav-link px-2 link-dark">게시판</a></li>
<li><a href="/board class="nav-link px-2 link-dark">게시판</a></li>
<li><a href = "javascript:;" onclick = "window.open('/chat','파일 업로드','width=500, height=801, toolbar=no,location=yes,status=no,menubar=no,scrollbars=yes,resizable=no');" class="nav-link px-2 link-dark">채팅</a></li>
<li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li>
</ul>
......
......@@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<meta name="description" content="" />
<meta name="author" content="" />
<title>묵호 - 게시판</title>
<title>묵호 - <%= title %></title>
<!-- Favicon-->
<link rel="icon" type="image/x-icon" href="../assets/favicon.ico" />
<!-- Bootstrap icons-->
......@@ -23,7 +23,7 @@
<a class="navbar-brand" href="/main">묵호의 놀이터</a>
<ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0">
<li><a href="/about" class="nav-link px-2 link-dark">About</a></li>
<li><a href="/board/list" class="nav-link px-2 link-dark">게시판</a></li>
<li><a href="/board" class="nav-link px-2 link-dark">게시판</a></li>
<li><a href = "javascript:;" onclick = "window.open('/chat','파일 업로드','width=500, height=801, toolbar=no,location=yes,status=no,menubar=no,scrollbars=yes,resizable=no');" class="nav-link px-2 link-dark">채팅</a></li>
<li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li>
</ul>
......@@ -35,25 +35,49 @@
</nav>
<div class ="wrap">
<div class="list_board">
<a class="board_btn" href="/board/list">
<a class="board_btn" href="/board/list/notice">
공지사항
</a>
<a class="board_btn" href="/board/list">
<a class="board_btn" href="/board/list/composer">
작곡가 구인
</a>
<a class="board_btn" href="/board/list">
<a class="board_btn" href="/board/list/singer">
가수 구인
</a>
<a class="board_btn" href="/board/list">
<a class="board_btn" href="/board/list/free">
자유게시판
</a>
<a class="board_btn" href="/board/list">
<a class="board_btn" href="/board/list/suggestion">
건의사항
</a>
</div>
<div class="container px-5 my-5">
<h1><%= title %></h1>
<%
var addr;
%>
<%
switch(title){
case '공지사항':
addr = 'notice';
break;
case '작곡가 구인':
addr = 'composer';
break;
case '가수 구인':
addr = 'singer';
break;
case '자유게시판':
addr = 'free';
break;
case '건의사항':
addr = 'suggestion';
break;
%>
<%
}
%>
<table border="1">
<tr>
<td>번호</td>
......@@ -73,7 +97,7 @@
<tr>
<td><%=data.idx%></td>
<td><%=data.nickname%></td>
<td><a href="/board/read/<%=data.idx%>"><%=data.title%></a></td>
<td><a href="/board/read/<%=addr%>/<%=data.idx%>"><%=data.title%></a></td>
<td><%=data.hit%></td>
<td><%=data.modidate%></td>
<td><%=data.regdate%></td>
......@@ -84,10 +108,9 @@
<tr>
<td colspan="6">
<%
for(var j = 0; j < rows.length/page_num ; j++){
%>
[<a href="/board/list/<%= j + 1 %>"><%= j+1 %></a>]
[<a href="/board/<%=addr%>/list/<%= j + 1 %>"><%= j+1 %></a>]
<%
}
%>
......@@ -95,7 +118,7 @@
</tr>
</table>
<nav class="navbar">
<a class="btn btn-outline-primary me-2" href="/board/write">글쓰기</a>
<a class="btn btn-outline-primary me-2" href="/board/write/<%=addr%>">글쓰기</a>
</nav>
</div>
</div>
......
......@@ -22,7 +22,7 @@
<a class="navbar-brand" href="/main">묵호의 놀이터</a>
<ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0">
<li><a href="/about" class="nav-link px-2 link-dark">About</a></li>
<li><a href="/board/list" class="nav-link px-2 link-dark">게시판</a></li>
<li><a href="/board" class="nav-link px-2 link-dark">게시판</a></li>
<li><a href = "javascript:;" onclick = "window.open('/chat','파일 업로드','width=500, height=801, toolbar=no,location=yes,status=no,menubar=no,scrollbars=yes,resizable=no');" class="nav-link px-2 link-dark">채팅</a></li>
<li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li>
</ul>
......
......@@ -22,7 +22,7 @@
<a class="navbar-brand" href="/main">묵호의 놀이터</a>
<ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0">
<li><a href="/about" class="nav-link px-2 link-dark">About</a></li>
<li><a href="/board/list" class="nav-link px-2 link-dark">게시판</a></li>
<li><a href="/board" class="nav-link px-2 link-dark">게시판</a></li>
<li><a href = "javascript:;" onclick = "window.open('/chat','파일 업로드','width=500, height=801, toolbar=no,location=yes,status=no,menubar=no,scrollbars=yes,resizable=no');" class="nav-link px-2 link-dark">채팅</a></li>
<li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li>
</ul>
......
......@@ -21,7 +21,7 @@
<a class="navbar-brand" href="/main">묵호의 놀이터</a>
<ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0">
<li><a href="/about" class="nav-link px-2 link-dark">About</a></li>
<li><a href="/board/list" class="nav-link px-2 link-dark">게시판</a></li>
<li><a href="/board" class="nav-link px-2 link-dark">게시판</a></li>
<li><a href = "javascript:;" onclick = "window.open('/chat','파일 업로드','width=500, height=801, toolbar=no,location=yes,status=no,menubar=no,scrollbars=yes,resizable=no');" class="nav-link px-2 link-dark">채팅</a></li>
<li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li>
</ul>
......
......@@ -22,7 +22,7 @@
<a class="navbar-brand" href="/main">묵호의 놀이터</a>
<ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0">
<li><a href="/about" class="nav-link px-2 link-dark">About</a></li>
<li><a href="/board/list" class="nav-link px-2 link-dark">게시판</a></li>
<li><a href="/board" class="nav-link px-2 link-dark">게시판</a></li>
<li><a href = "javascript:;" onclick = "window.open('/chat','파일 업로드','width=500, height=801, toolbar=no,location=yes,status=no,menubar=no,scrollbars=yes,resizable=no');" class="nav-link px-2 link-dark">채팅</a></li>
<li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li>
</ul>
......
......@@ -22,7 +22,7 @@
<a class="navbar-brand" href="/main">묵호의 놀이터</a>
<ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0">
<li><a href="/about" class="nav-link px-2 link-dark">About</a></li>
<li><a href="/board/list" class="nav-link px-2 link-dark">게시판</a></li>
<li><a href="/board" class="nav-link px-2 link-dark">게시판</a></li>
<li><a href = "javascript:;" onclick = "window.open('/chat','파일 업로드','width=500, height=801, toolbar=no,location=yes,status=no,menubar=no,scrollbars=yes,resizable=no');" class="nav-link px-2 link-dark">채팅</a></li>
<li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li>
</ul>
......
......@@ -19,7 +19,7 @@
<a class="navbar-brand" href="/main">묵호의 놀이터</a>
<ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0">
<li><a href="/about" class="nav-link px-2 link-dark">About</a></li>
<li><a href="/board/list" class="nav-link px-2 link-dark">게시판</a></li>
<li><a href="/board" class="nav-link px-2 link-dark">게시판</a></li>
<li><a href = "javascript:;" onclick = "window.open('/chat','파일 업로드','width=500, height=801, toolbar=no,location=yes,status=no,menubar=no,scrollbars=yes,resizable=no');" class="nav-link px-2 link-dark">채팅</a></li>
<li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li>
</ul>
......@@ -29,16 +29,40 @@
</div>
</div>
</nav>
<%
var addr;
%>
<div class="container px-5 my-5">
<h1><%= title %></h1>
<%
switch(title){
case '공지사항 글 상세':
addr = 'notice';
break;
case '작곡가 구인 글 상세':
addr = 'composer';
break;
case '가수 구인 글 상세':
addr = 'singer';
break;
case '자유게시판 글 상세':
addr = 'free';
break;
case '건의사항 글 상세':
addr = 'suggestion';
break;
%>
<%
}
%>
<script>
function submit2(frm){
frm.action="/board/delete";
frm.action="/board/delete/<%=addr%>";
frm.submit();
return true;
}
</script>
<form action="/board/update" method="post">
<form action="/board/update/<%=addr%>" method="post">
<table border="1">
<input type="hidden" name="idx" value="<%=row.idx%>"/>
<tr>
......@@ -69,7 +93,7 @@
<td colspan="3">
<button type="submit">글 수정</button>
<button type="summit" onclick="return submit2(this.form);">글 삭제</button>
<a href="/board/list">
<a href="/board/<%=addr%>/list">
<input type="button" value="목록">
</a>
</td>
......@@ -81,7 +105,7 @@
<h1>댓글</h1>
<script>
function submit3(frm){
frm.action="/board/read/commentdelete";
frm.action="/board/read/<%=addr%>/commentdelete";
frm.submit();
return true;
}
......@@ -89,12 +113,12 @@
}
</script>
<form action="/board/read/commentwrite" method="post">
<form action="/board/read/<%=addr%>/commentwrite" method="post">
<table border="1">
<input type="hidden" name="idx" value="<%=row.idx%>"/>
<tr>
<td>닉네임</td>
<td>댓글</td>
<td>내용</td>
</tr>
<%
for(var i=0; i<comment_length; i++){
......@@ -115,7 +139,7 @@
}
%>
<tr>
<td><%=usernick%></td>
<td><%=nickname%></td>
<td><textarea name="comment" id="comment" cols="30" rows="2" required></textarea></td>
<td colspan="2">
<button type="submit">댓글 쓰기</button>
......
......@@ -22,7 +22,7 @@
<a class="navbar-brand" href="/main">묵호의 놀이터</a>
<ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0">
<li><a href="/about" class="nav-link px-2 link-dark">About</a></li>
<li><a href="/board/list" class="nav-link px-2 link-dark">게시판</a></li>
<li><a href="/board" class="nav-link px-2 link-dark">게시판</a></li>
<li><a href = "javascript:;" onclick = "window.open('/chat','파일 업로드','width=500, height=801, toolbar=no,location=yes,status=no,menubar=no,scrollbars=yes,resizable=no');" class="nav-link px-2 link-dark">채팅</a></li>
<li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li>
</ul>
......
......@@ -18,7 +18,7 @@
<a class="navbar-brand" href="/main">묵호의 놀이터</a>
<ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0">
<li><a href="/about" class="nav-link px-2 link-dark">About</a></li>
<li><a href="/board/list" class="nav-link px-2 link-dark">게시판</a></li>
<li><a href="/board" class="nav-link px-2 link-dark">게시판</a></li>
<li><a href = "javascript:;" onclick = "window.open('/chat','파일 업로드','width=500, height=801, toolbar=no,location=yes,status=no,menubar=no,scrollbars=yes,resizable=no');" class="nav-link px-2 link-dark">채팅</a></li>
<li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li>
</ul>
......@@ -28,9 +28,33 @@
</div>
</div>
</nav>
<%
var addr;
%>
<div class="container px-5 my-5">
<h1><%= title %></h1>
<form action="/board/write" method="post">
<%
switch(title){
case '공지사항 글 쓰기':
addr = 'notice';
break;
case '작곡가 구인 글 쓰기':
addr = 'composer';
break;
case '가수 구인 글 쓰기':
addr = 'singer';
break;
case '자유게시판 글 쓰기':
addr = 'free';
break;
case '건의사항 글 쓰기':
addr = 'suggestion';
break;
%>
<%
}
%>
<form action="/board/write/<%=addr%>" method="post">
<table border="1">
<tr>
......