게시판(board)

2022. 10. 7. 17:09Dev.Program/JSP & Javascript

728x90

< 과제 >

jsp4_test 새 폴더 만들기 (과제입니다!!!!! - 폴더 압축해서 선생님께 메일 보내기)

나이 성별 이메일만 추가해서 jsp4랑 똑같이 만들어보기

updateForm.jsp 에서 나이 넣을 때 주의 (null 이면 에러 날 거)

남 선택하면 남이 선택되고 여 선택하면 여 선택되서 나오도록

create table member2(

id varchar(20) primary key,

pass varchar(20),

name varchar(20),

age int,

gender varchar(20),

email varchar(40),

reg_date datetime

);

 

< * SQL언어 구문 >

정의어 - 공간만들기(create), 수정(alter), 삭제(drop)

제어어 - 권한 부여 : 일을 할수 있게끔(grant), 권한 해제(revoke)

★ 조작어(실제로 프로그램에서 가장 많이 사용)

- 공간안에 내용 ★ 저장(insert), 수정(update), 삭제(delete), 조회(select) ★

< insert 기본 문법 : 데이터 저장 >

insert into 테이블이름(열이름1, 열이름2)

values(값1, ‘값2’);   //문자열은 작은따옴표(‘’) 안에 넣어주기

 

< where 기본 문법 : 조건 >

select 열이름, 열이름 from 테이블이름

where 조건열=값;

 

< order by 기본 문법 : 정렬 >

select 열이름, 열이름 from 테이블 이름

order by 기준열 desc/asc;

 

< update 기본 문법 : 데이터 수정 >

update 테이블이름 set 수정할 열이름 = 값, 수정할 열이름 = 값

where 조건열 = 값;

 

< delete 기본 문법 : 데이터 삭제 >

delete from 테이블이름

where 조건열 = 값;

 

< alter 기본 문법 : 수정 >

alter table 테이블이름

add 열이름 데이터타입(크기);

 

deleteForm.jsp / deletePro.jsp 완성

 

list.jsp 만들기 - jsp3에 select 참고(회원 전체 정보 리스트로 뿌려주기)

1단계 드라이버 로더

2단계 디비연결

3단계  sql member모든 회원 가져오기

4단계 rs ⇐ 결과 저장

5단계 반복 첫행으로 이동해서 데이터 있으면  id,pass,name,reg_date열 가져와서 출력

<h1>WebContent/jsp4/list.jsp</h1>
<%
request.setCharacterEncoding("utf-8");

Class.forName("com.mysql.jdbc.Driver");

String dburl = "jdbc:mysql://localhost:3306/jspdb1";
String dbuser = "jspid";
String dbpass = "jsppass";
Connection con = DriverManager.getConnection(dburl, dbuser, dbpass);

String sql = "select * from member";
PreparedStatement pstmt = con.prepareStatement(sql);

ResultSet rs = pstmt.executeQuery();
%>

<table border="1">
<tr><td>아이디</td><td>비밀번호</td><td>이름</td><td>가입날짜</td></tr>
<%
while(rs.next()) {
%><tr><td><%=rs.getString("id")%></td>

            <td><%=rs.getString("pass")%></td>
            <td><%=rs.getString("name")%></td>
            <td><%=rs.getTimestamp("reg_date")%></td></tr><%
}%>
</table>

푼 답 )

- 출력창

⇒ 이 창은 관리자만 볼 수 있게 나중에 바꿔줄 거! (전체 정보를 조회할 수 있기 때문)

⇒ admin 관리자 하나 가입시키기 (그래서 admin으로 로그인 했을 때만 창이 보이도록!)

  • main.jsp 로 가서

세션값이 있으면, 세션값이 "admin"과 같으면 회원목록이 보이게 설정(if문 쓰기)

  • <a href="list.jsp">회원목록</a>

(이걸로 내가 쓴 글은 수정버튼이 보이고, 내가 쓴 글이 아니면 수정 안되게끔도 설정 가능하다! 응용!)

<%
if(id != null) {
if(id.equals("admin")) {
%><a href="list.jsp">회원목록</a><%
}
}
%>
  • main.jsp 에 추가!

  • 관리자가 볼 수 있는 창 (회원목록 보임)

  • 일반 회원이 볼 수 있는 창(회원목록 안보임)



문제 ) list.jsp 에서도

세션값 가져오기

세션값이 없으면, 세션값이 "admin"이 아니면

loginForm.jsp로 이동

if(세션값이 없으면) {

} else {
if(세션값이 "admin"이 아니면) {

}
}

 

String id = (String)session.getAttribute("id");
if(id == null) {
response.sendRedirect("loginForm.jsp");
} else {
if(!(id.equals("admin"))) {
response.sendRedirect("loginForm.jsp");
}
}

푼 답 ) !(id.equals("admin")) 이거 괄호 빼고 !id.equals("admin") 이렇게 써도 됨.




< 과제 관련 테이블 >

  • 책 p. 505 에 2번 처럼! 나이 성별 이메일 추가해서 새로운 회원가입 창 만들거.

(개인 프로젝트 할 때는 저번에 했던 (우편번호) 주소도 추가해 줄 거!)

 

mysql 창에서 나이, 성별, 이메일 열(컬럼, 필드) 추가해주기

alter table member
add age int;
alter table member
add gender varchar(5);
alter table member
add email varchar(30);

  • 추가 된 공간에는 기본 값인 NULL 이 들어가있다.







< 게시판(board) 테이블 만들기 >

⇒ 글번호(자동생성), 글쓴이, 비밀번호, 제목, 내용, 조회수, 작성일(자동생성), 첨부파일 ..

⇒ 비밀번호 : 글 쓴 사람인지 아닌지 판별(글 쓴 사람이면 수정/삭제가 가능하도록)

⇒ 글번호 : 회원가입할 때 회원아이디를 기준키로 한 것처럼 게시판에선 글번호기준키로!

create table board (
num int primary key,
name varchar(20),
pass varchar(20),
subject varchar(200),
content varchar(2000),
readcount int,
date datetime*
);

* date는 날짜만, datetime과 timestamp 는 날짜와 시간 전부(우린 datetime으로 설정!)

  • board 테이블 생성

  • board 테이블 정보

 

num(글번호) 부여 : DB단에서 부여하는 방법과, 프로그램단에서 부여하는 방법이 있는데 우리는 프로그램단에서 만들거

jsp5 새 폴더 만들기

writeForm.jsp / writePro.jsp 새 문서 만들기

<h1>WebContent/jsp5/writeForm.jsp</h1>

<form action="writePro.jsp" method="post">
<table border="1">
<tr><td>글쓴이</td><td><input type="text" name="name"></td></tr>
<tr><td>비밀번호</td><td><input type="text" name="pass"></td></tr>
<tr><td>제목</td><td><input type="text" name="subject"></td></tr>
<tr><td>내용</td><td><textarea name="content" rows="10" cols="20"></textarea></td></tr>
<tr><td colspan="2"><input type="submit" value="글쓰기"></td></tr>
</table>
</form>

writeForm.jsp

<h1>WebContent/jsp5/writePro.jsp</h1>
<%
request.setCharacterEncoding("utf-8");

String name = request.getParameter("name");
String pass = request.getParameter("pass");
String sub = request.getParameter("subject");
String ct = request.getParameter("content");
Timestamp date = new Timestamp(System.currentTimeMillis());
%>
글쓴이 : <%=name %>
제목 : <%=sub %>
내용 : <%=ct %>
<%
Class.forName("com.mysql.jdbc.Driver");

String dburl = "jdbc:mysql://localhost:3306/jspdb1";
String dbuser = "jspid";
String dbpass = "jsppass";
Connection con = DriverManager.getConnection(dburl, dbuser, dbpass);

String sql = "insert into board(num, name, pass, subject, content, readcount, date) values(?, ?, ?, ?, ?, ?, ?)";
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setInt(1, 0);
pstmt.setString(2, name);
pstmt.setString(3, pass);
pstmt.setString(4, sub);
pstmt.setString(5, ct);
pstmt.setInt(6, 0);
pstmt.setTimestamp(7, date);

pstmt.executeUpdate();
%>

writePro.jsp (일단 num과 readcount 에는 0 넣어주기)

- 실행창

  • 디비창(만들어 진 거 확인)0

 

<table border="1">
<tr><td>글쓴이</td><td><%=name %></td></tr>
<tr><td>날짜</td><td><%=date %></td></tr>
<tr><td>제목</td><td><%=sub %></td></tr>
<tr><td>내용</td><td><textarea name="content" rows="10" cols="20"><%=ct %></textarea></td></tr>
</table>

writePro.jsp 테이블로 나오도록 바꿈!

- 실행창



int num = 0;
String sql = "select max(num) from board";
PreparedStatement pstmt = con.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
if(rs.next()) {
num = rs.getInt("max(num)") +1;
}

writePro.jsp 게시판 글번호

  • board 테이블 내에서 num열 중에 가장 큰 번호 구해서 가져오기
  • 갯수 count() 합계 sum() 최댓값 max() ….. sql에도 함수가 있다!
  • max(num) 을 구하면 값이 무조건 있기 때문에 if문을 씀.



list.jsp 글 목록 만들기

<h1>WebContent/jsp5/list.jsp</h1>
<%
request.setCharacterEncoding("utf-8");

Class.forName("com.mysql.jdbc.Driver");

String dburl = "jdbc:mysql://localhost:3306/jspdb1";
String dbuser = "jspid";
String dbpass = "jsppass";
Connection con = DriverManager.getConnection(dburl, dbuser, dbpass);

String sql = "select * from board";
PreparedStatement pstmt = con.prepareStatement(sql);

ResultSet rs = pstmt.executeQuery();
%>

<table border="1">
<tr><td>글번호</td><td>글쓴이</td><td>제목</td><td>작성날짜</td></tr>
<%
while(rs.next()) {
%><tr><td><%=rs.getInt("num")%></td><td><%=rs.getString("name")%>
</td><td><%=rs.getString("subject")%></td><td><%=rs.getTimestamp("date")%></td></tr><%
}
%>
</table>

 

list.jsp 만들기

<h1>WebContent/jsp5/list.jsp</h1>
<%
request.setCharacterEncoding("utf-8");

Class.forName("com.mysql.jdbc.Driver");

String dburl = "jdbc:mysql://localhost:3306/jspdb1";
String dbuser = "jspid";
String dbpass = "jsppass";
Connection con = DriverManager.getConnection(dburl, dbuser, dbpass);

String sql = "select * from board";
PreparedStatement pstmt = con.prepareStatement(sql);

ResultSet rs = pstmt.executeQuery();
%>

<table border="1">
<tr><td>글번호</td><td>글제목</td><td>작성자</td><td>조회수</td><td>작성일</td></tr>
<%
while(rs.next()) {
%><tr><td><%=rs.getInt("num")%></td><td><%=rs.getString("subject")%>
</td><td><%=rs.getString("name")%></td><td><%=rs.getInt("readcount")%></td>
<td><%=rs.getTimestamp("date")%></td></tr><%
}
%>
</table>



⇒ 글 목록에서 글 제목 클릭하면 해당 글이 보이게!

content.jsp 만들기

<%while(rs.next()) {
%><tr><td><%=rs.getInt("num")%></td>
<td><a href="content.jsp?num=<%=rs.getInt("num")%>"><%=rs.getString("subject")%></a></td>
<td><%=rs.getString("name")%></td><td><%=rs.getInt("readcount")%></td>
<td><%=rs.getTimestamp("date")%></td></tr><%}%>
  • list.jsp 화면
<h1>WebContent/jsp5/content.jsp</h1>
<%
request.setCharacterEncoding("utf-8");
int num = Integer.parseInt(request.getParameter("num"));

Class.forName("com.mysql.jdbc.Driver");

String dburl = "jdbc:mysql://localhost:3306/jspdb1";
String dbuser = "jspid";
String dbpass = "jsppass";

Connection con = DriverManager.getConnection(dburl, dbuser, dbpass);

String sql = "select * from board where num = ?";
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setInt(1, num);

ResultSet rs = pstmt.executeQuery();

if(rs.next()) {
%>
<table border="1">
<tr><td>글번호</td><td><%=rs.getInt("num") %></td><td>작성일</td><td><%=rs.getTimestamp("date") %></td></tr>
<tr><td>글쓴이</td><td><%=rs.getString("name") %></td><td>조회수</td><td><%=rs.getInt("readcount") %></td></tr>
<tr><td>제목</td><td colspan="3"><%=rs.getString("subject") %></td></tr>
<tr><td>내용</td><td colspan="3"><%=rs.getString("content") %></td></tr>
<tr><td colspan="4"><input type="button" value="글수정">
<input type="button" value="글삭제">
<input type="button" value="글목록" onclick="location.href='list.jsp'"></td></tr>
</table>
<%
}%>
  • content.jsp 화면

  • 리스트 실행 화면에서 글제목 누르면 해당 글로 넘어감.

 

⇒ content.jsp 에서 글을 조회하면 readcount(조회수)가 증가하도록 제어

String sql = "update board set readcount = readcount+1 where num = ?";
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setInt(1, num);
pstmt.executeUpdate();

 

⇒ list.jsp 에서 최신글이 가장 위에 올라오도록 제어

String sql = "select * from board order by num desc";

 

- 최근글이 위로 올라옴




updateForm / updatePro 만들기

⇒ 수정할 때는 비밀번호를 확인해서 비밀번호가 일치 할 경우에만 수정가능하도록 제어

⇒ 몇 번 글을 수정할 지 들고가야됨!

  • content.jsp 화면에서
  • <input type="button" value="글수정" onclick="location.href='updateForm.jsp?num=<%=rs.getInt("num")%>'">

 

⇒ 글쓴이, 제목, 내용 수정 가능하게 제어하고

비밀번호는 직접 입력해서 일치하는지 아닌지 확인하는 작업 추가로 제어

 

<input type="hidden" name="num" value="<%=rs.getInt("num")%>">

→ 수정하는 updatePro.jsp 로 갈 때 num 값을 들고가야하기 때문에!

 

<h1>WebContent/jsp5/updateForm.jsp</h1>
<%
request.setCharacterEncoding("utf-8");
int num = Integer.parseInt(request.getParameter("num"));

Class.forName("com.mysql.jdbc.Driver");

String dburl = "jdbc:mysql://localhost:3306/jspdb1";
String dbuser = "jspid";
String dbpass = "jsppass";

Connection con = DriverManager.getConnection(dburl, dbuser, dbpass);

String sql = "select * from board where num = ?";
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setInt(1, num);

ResultSet rs = pstmt.executeQuery();
if(rs.next()) {
%>
<form action="updatePro.jsp" method="post">
<input type="hidden" name="num" value="<%=rs.getInt("num")%>">
<table>
<tr><td bgcolor=ffe4e1>글쓴이</td><td><input type="text" name="name" value="<%=rs.getString("name")%>"></td></tr>
<tr><td bgcolor=ffe4e1>비밀번호</td><td><input type="text" name="pass"></td></tr>
<tr><td bgcolor=ffe4e1>제목</td><td><input type="text" name="subject" value="<%=rs.getString("subject")%>"></td></tr>
<tr><td bgcolor=ffe4e1>내용</td><td><textarea name="content" rows="10" cols="20"><%=rs.getString("content")%></textarea></td></tr>
<tr bgcolor=eeeeee><td colspan="2"><input type="submit" value="글수정"></td></tr>
</table>
</form>
<%
} %>
  • updateForm.jsp 화면

 

<h1>WebContent/jsp5/updatePro.jsp</h1>
<%
request.setCharacterEncoding("utf-8");

int num = Integer.parseInt(request.getParameter("num"));
String name = request.getParameter("name");
String pass = request.getParameter("pass");
String subject = request.getParameter("subject");
String content = request.getParameter("content");

Class.forName("com.mysql.jdbc.Driver");

String dburl = "jdbc:mysql://localhost:3306/jspdb1";
String dbuser = "jspid";
String dbpass = "jsppass";

Connection con = DriverManager.getConnection(dburl, dbuser, dbpass);

String sql = "select * from board where num = ?";
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setInt(1, num);

ResultSet rs = pstmt.executeQuery();

if(rs.next()) {
if(rs.getString("pass").equals(pass)) {
sql = "update board set name = ?, subject = ?, content =? where num = ?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, name);
pstmt.setString(2, subject);
pstmt.setString(3, content);
pstmt.setInt(4, num);
%>
<script type="text/javascript">
alert("글 수정 완료");
location.href = "list.jsp";
</script>
<%
pstmt.executeUpdate();
} else {%>
<script type="text/javascript">
alert("비밀번호가 틀립니다!");
history.back();
</script>
<% }
} %>
  • updatePro.jsp 화면

 

728x90

'Dev.Program > JSP & Javascript' 카테고리의 다른 글

게시판 만들기 - (1)  (1) 2022.10.08
자바빈(JavaBean)  (0) 2022.10.07
JSP - DB 연동  (0) 2022.10.07
cookie / session / DB연동 - Mysql  (0) 2022.10.07
내장객체  (0) 2022.10.07