2022. 10. 7. 17:09ㆍDev.Program/JSP & Javascript
< 과제 >
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 화면
'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 |