집에서 수정하다보니 처음 보는 오류들이 많이 발생함.
최대한 코드 수정한걸 복사하고 붙어넣어서 최대한 이상이 안생기도록 할것.
(파일 삭제후, 붙어넣기하니깐 오류 발생함. 내용 전체를 컨트롤 c,v 해야함)
CREATE TABLE BOARDT
(B_ID NUMBER(5) PRIMARY KEY
,B_NAME VARCHAR2(20)
,B_EMAIL VARCHAR2(50)
,B_TITLE VARCHAR2(80)
,B_CONTENT VARCHAR2(3000)
,B_DATE DATE
,B_HIT NUMBER(5) DEFAULT 0
,B_PWD VARCHAR2(12)
,B_IP VARCHAR2(15)
,B_REF NUMBER(5)
,B_STEP NUMBER(5)
,B_LEVEL NUMBER(5)
);
package magic.board;
import java.sql.Timestamp;
public class BoardBean {
private int b_id;
private String b_name;
private String b_email;
private String b_title;
private String b_content;
private Timestamp b_date;
private int b_hit;
private String b_pwd;
private String b_ip;
private int b_ref;
private int b_step;
private int b_level;
public int getB_ref() {
return b_ref;
}
public void setB_ref(int b_ref) {
this.b_ref = b_ref;
}
public int getB_step() {
return b_step;
}
public void setB_step(int b_step) {
this.b_step = b_step;
}
public int getB_level() {
return b_level;
}
public void setB_level(int b_level) {
this.b_level = b_level;
}
public String getB_ip() {
return b_ip;
}
public void setB_ip(String b_ip) {
this.b_ip = b_ip;
}
public String getB_pwd() {
return b_pwd;
}
public void setB_pwd(String b_pwd) {
this.b_pwd = b_pwd;
}
public int getB_id() {
return b_id;
}
public void setB_id(int b_id) {
this.b_id = b_id;
}
public String getB_name() {
return b_name;
}
public void setB_name(String b_name) {
this.b_name = b_name;
}
public String getB_email() {
return b_email;
}
public void setB_email(String b_email) {
this.b_email = b_email;
}
public String getB_title() {
return b_title;
}
public void setB_title(String b_title) {
this.b_title = b_title;
}
public String getB_content() {
return b_content;
}
public void setB_content(String b_content) {
this.b_content = b_content;
}
public Timestamp getB_date() {
return b_date;
}
public void setB_date(Timestamp b_date) {
this.b_date = b_date;
}
public int getB_hit() {
return b_hit;
}
public void setB_hit(int b_hit) {
this.b_hit = b_hit;
}
//================ 페이지 목록 ===================
public static int pageSize =10; //한페이지에 10개의 글을 보여주기 위한 변수
public static int pageCount = 1; //페이지 개수 카운트, 페이지(컬럼)가 많을 수록 늘어남(초기값)
public static int pageNum = 1; //페이지 번호(기본값)
//이부분 정리 다시 해서 노션에 정리하기
// 84건의 게시글 존재
//=> pageCount = 9
//pageNum = 1
//limit = 4(사진에서 목록중 숫자가 몇개 있는가? 1,2,3,4 => 5,6,7,8 =>9 이런 순으로 목록이 적혀 있음
//temp = 0 // (pageNum -1) % limit;
//startPage = 1 //pageNum(1) - temp(0)
//if(1-4>0) 거짓
//for(int i = 1; i<5; i++){
// if(1=1)(참) str=[1]
// if(1>=9)(거짓)
// }
//for(int 2 = 1; i<5; i++){
// if(2=1) 거짓
// else{str=[1]+ [2] //1은 링크가 걸리지 않고 2는 링크가 걸림
// if(2>=9)(거짓)
// }
//for(int 3 = 1; i<5; i++){
// if(3=1) 거짓
// else{str=[1]+ [2] +[3]//3에 링크 걸림
// if(3>=9)(거짓)
// }
//for(int 4 = 1; 4<5; i++){
// if(4=1) 거짓
// else{str=[1]+ [2] + [3] + [4]//4에 링크 걸림
// if(4>=9)(거짓)
// }
//if (5<= 9){ 5[다음]
//
//}
// 최종적으로 [1]+[2]+[3]+[4]+ 다음
//===============================
// 84건의 게시글 존재
//=> pageCount = 9
//pageNum = 1
//limit = 4(사진에서 목록중 숫자가 몇개 있는가? 1,2,3,4 => 5,6,7,8 =>9 이런 순으로 목록이 적혀 있음
//temp = 0 // (pageNum -1) % limit;
//startPage = 1 //pageNum(1) - temp(0)
//if(1-4>0) 거짓
//for(int i = 1; i<5; i++){
// if(1=1)(참) str=[1]
// if(1>=9)(거짓)
// }
//for(int 2 = 1; i<5; i++){
// if(2=1) 거짓
// else{str= [1]+ [2] //1은 링크가 걸리지 않고 2는 링크가 걸림
// if(2>=9)(거짓)
// }
//for(int 3 = 1; i<5; i++){
// if(3=1) 거짓
// else{str=[1]+ [2] +[3]//3에 링크 걸림
// if(3>=9)(거짓)
// }
//for(int 4 = 1; 4<5; i++){
// if(4=1) 거짓
// else{str=[1]+ [2] + [3] + [4]//4에 링크 걸림
// if(4>=9)(거짓)
// }
//if (5<= 9){ 5[다음]
//
//}
// 최종적으로 [1]+[2]+[3]+[4]+ 다음
// 84건의 게시글 존재
//=> pageCount = 9
//pageNum = 5
//limit = 4(사진에서 목록중 숫자가 몇개 있는가? 1,2,3,4 => 5,6,7,8 =>9 이런 순으로 목록이 적혀 있음
//temp = 0 // (pageNum -1) % limit;
//startPage = 5 //pageNum(5) - temp(0)
//if(5-4>0) 참 {[이전4]}
//for(int i = 5; i<9; i++){
// if(5=5)(참) str=[이전 4]+[5] : 두개 다 링크 걸려있음
// if(5>=9)(거짓)
// }
//for(int i = 6; i<9; i++){
// if(6=1) 거짓
// else{str= [이전4]+[5]+[6] //6은 링크가 걸림
// if(6>=9)(거짓)
// }
//for(int i = 7; i<9; i++){
// if(7=5) 거짓
// else{str=[이전4]+[5]+[6]+[7]
// if(7>=9)(거짓)
// }
//for(int i = 8; i<9; i++){
// if(7=1) 거짓
// else{str=[이전4]+[5]+[6]+[7]+[8]
// if(3>=9)(거짓)
// }
//if (9<= 9){ 9[다음]
//
//}
// 최종적으로 [이전 4]+[5]+[6]+[7]+[8]+ [다음 9]
// 84건의 게시글 존재
//pageCount = 9
//pageNum = 9
//limit = 4(사진에서 목록중 숫자가 몇개 있는가? 1,2,3,4 => 5,6,7,8 =>9 이런 순으로 목록이 적혀 있음
//temp = 0 // (pageNum -1) % limit;
//startPage = 9 //pageNum(9) - temp(0)
//if(9-4>0) 참 {[이전8]}
//for(int i = 9; i<13; i++){
// if(9=9)(참) str=[이전 8]+[9] : 두개 다 링크 걸려있음
// if(9>=9)참
// }
//if(13<=9)거짓
//
//}
//최종적으로 [이전 8]+[9]
//=============
public static String pageNumber(int limit) {
//페이지 목록들을 만들어 주는 메소드
//int limit -> 몇개의 페이지에 대한 로직을 처리할것인지 설정
String str ="";
int temp = (pageNum -1) % limit;//시작 페이지를 구함
int startPage = pageNum - temp; // 시작페이지 설정 "1 - 0 = 1" 이기 때문에 1이 됨
if((startPage - limit) > 0) {//[이전]을 구현하기 위한 if문
//limit 4, temp 0 , startPage 1이라고 가정했을때
//if((1-4)>0)
//pageNum = 5 인경우 => startPage 5
//if((5-4) >0 ) => 참
str ="<a href='list.jsp?pageNum="+(startPage-1)+"'>[이전]</a> ";
//str = [이전]
}
for (int i = startPage; i < (startPage+limit); i++) {
//페이지 번호가 몇개인지 모름. 즉 페이지 번호를 나열할 필요가 있음
//for(i = 1; i < 5; i++) - >4까지 나옴
//pageNum = 5인경우 for(i= 5; i<9;i++)
if (i == pageNum) {
//i = 1 이면 링크가 걸리지 않음
str += "["+i+"] ";
//str = [1]
}else {
str += "<a href='list.jsp?pageNum="+i+"'>["+i+"]</a> ";
}
if (i >= pageCount) {
break;
}
}
if((startPage + limit) <= pageCount) {//[다음]을 구현하기 위한 if문
str +="<a href='list.jsp?pageNum="+(startPage+limit)+"'>[다음]</a> ";
// str = "<a href='list.jsp?pageNum="+(startPage-1)+"'>[이전]</a> ";
//str = [이전]
}
return str;
}
}
package magic.board;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class BoardDBBean {
//1. 전역 BoardDBBean 객체 레퍼런스를 리턴하는 메소드
private static BoardDBBean instance = new BoardDBBean();
public static BoardDBBean getInstance(){
return instance;
//getConnection이나 getInstance는 계속 사용하기 좋음(재사용하기 좋다는 뜻)
//jsp에서 메소드 호출하면 편하기 때문
}
//2.쿼리 작업에 사용할 커넥션 객체를 리턴하는 메소드
public Connection getConnection( ) throws Exception{
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/oracle");
//경로 찾기
return ds.getConnection();
//getConnection이나 getInstance는 계속 사용하기 좋음(재사용하기 좋다는 뜻)
//jsp에서 메소드 호출하면 편하기 때문
}
// //3. 전달인자로 받은 BoardBean board를 BOARDT 테이블에 삽입하는 메소드
public int insertBoard(BoardBean board) throws Exception {
int re = -1;
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = "";
int number;
//게시판 2-1
// 답변글을 위한 변수
int id = board.getB_id();
int ref = board.getB_ref();
int step = board.getB_step();
int level = board.getB_level();
try {
conn = getConnection();
sql = "SELECT MAX(B_ID) FROM BOARDT";//글번호 추가
pstmt = conn.prepareStatement(sql);// DB에 SQL 전달(SQL문 사용하기 위한 참조변수 선언
rs = pstmt.executeQuery();//쿼리 결과를 rs에 받음(select 조회문은 executeQuery 메소드 처리
if (rs.next()) {//다음 쿼리 데이터가 있는 경우를 조건문으로 줌.
number = rs.getInt(1)+1;
//글번호가 가장 큰 값을 조회하여 1증가 한 값을 INSERT쿼리에 추가
} else {
number = 1;
}
// id가 값이 있거나 0이거나 둘 중 하나가 될 수 있다. 0 일때는 새글, 0이 아닐 때는 답변글
if (id != 0) { //답변글일 때(id가 0이 아니면 답글로 봄)
// update문이 핵심
sql = "UPDATE BOARDT SET b_step = b_step+1 WHERE b_ref=? AND b_step>?";
//부모글을 찾아 그중에서 현재글(원부모글)보다 b_step이 큰 글들을 찾아서 부모글들의 b_step값을 모두 1씩 더함
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, ref);//값을 세팅(넣어줌)(위에서 변수로 받은 ref를 받음)
pstmt.setInt(2, step);//(위에서 변수로 받은 step를 받음)값을 세팅(넣어줌)
pstmt.executeUpdate();//update문(쿼리)
step = step + 1;//답글
level = level + 1;
} else { //답변글이 아닐 때=새글
ref = number;
step = 0;
level = 0;
}
// System.out.println("@@@### board.number ===> "+number);
// System.out.println("@@@### board.getB_name() ===> "+board.getB_name());
// System.out.println("@@@### board.getB_email() ===> "+board.getB_email());
// System.out.println("@@@### board.getB_title() ===> "+board.getB_title());
// System.out.println("@@@### board.getB_content() ===> "+board.getB_content());
// System.out.println("@@@### board.getB_date() ===> "+board.getB_date());
// System.out.println("@@@### board.getB_pwd() ===> "+board.getB_pwd());
// System.out.println("@@@### board.getB_ip() ===> "+board.getB_ip());
// sql = "INSERT INTO BOARDT VALUES(?,?,?,?,?,?,?,?,?)";
sql = "INSERT INTO BOARDT VALUES(?,?,?,?,?,?,?,?,?,?,?,?)";
pstmt = conn.prepareStatement(sql);// DB에 SQL 전달(SQL문 사용하기 위한 참조변수 선언
// 데이터가 제대로 들어갔는지 확인 해야함
// System.out.println("@@@@#### number=====>"+number);
// System.out.println("@@@@#### board.getB_name()=====>"+board.getB_name());
// System.out.println("@@@@#### board.getB_email()=====>"+board.getB_email());
// System.out.println("@@@@#### board.getB_title()=====>"+board.getB_title());
// System.out.println("@@@@#### board.getB_content()=====>"+board.getB_content());
// System.out.println("@@@@#### board.getB_date()=====>"+board.getB_date());
// System.out.println("@@@@#### board.getB_hit()=====>"+board.getB_hit());
// System.out.println("@@@@#### board.getB_pwd()=====>"+board.getB_pwd());
// System.out.println("@@@@#### board.getB_ip()=====>"+board.getB_ip());
// System.out.println("@@@@#### board.getB_ref()=====>"+board.getB_ref());
// System.out.println("@@@@#### board.getB_step()=====>"+board.getB_step());
// System.out.println("@@@@#### board.getB_level()=====>"+board.getB_level());
//
// //변수 값 담기
pstmt.setInt(1, number);//인덱스 번호 변경 및 글번호 (number) 추가
pstmt.setString(2, board.getB_name());
pstmt.setString(3, board.getB_email());
pstmt.setString(4, board.getB_title());
pstmt.setString(5, board.getB_content());
pstmt.setTimestamp(6, board.getB_date());//날짜 및 시간 저장한걸 추가(setTimestamp)
pstmt.setInt(7, board.getB_hit());
pstmt.setString(8, board.getB_pwd());
pstmt.setString(9, board.getB_ip());
pstmt.setInt(10, ref);
pstmt.setInt(11, step);
pstmt.setInt(12, level);
pstmt.executeUpdate();
re = 1;
// re = pstmt.executeUpdate();
} catch(SQLException ex) {
System.out.println("추가 실패");
ex.printStackTrace();
} finally {
try {//자원반납(순서 중요)
if(pstmt != null) pstmt.close();
if(conn != null) conn.close();
} catch(Exception e) {
e.printStackTrace();
}
}
return re;
}
//4. 리턴타입이 ArrayList<BoardBean> 인 listBoard() 메소드 추가(글목록을 위한 메소드)
public ArrayList<BoardBean> listBoard(String pageNumber) throws Exception{//제네릭 사용함 , 파라미터는 BoardBean
Connection conn = null;//데이터 베이스 접속
Statement stmt = null;// DB에 SQL 전달
int dbCount = 0;//글이 몇개나 있는지 확인(게시글의 갯수
int absoultepage = 0;//글이 몇개나 있는지 확인(게시글의 갯수
ResultSet rs = null;
ResultSet pageSet = null;
//db 정보 받기 위함
String sql=" SELECT b_id \r\n" +
" , b_name\r\n" +
" , b_email\r\n" +
" , b_title\r\n" +
" , b_content\r\n" +
" , b_date\r\n" +
" , b_hit\r\n" +
" , b_pwd\r\n" +
" , b_ip\r\n" +
" , b_ref\r\n" +
" , b_step\r\n" +
" , b_level\r\n" +
" FROM BOARDT\r\n" +
" ORDER BY b_ref desc, b_step asc";//해당 데이터 쿼리 정렬되게끔 함.
String sql2="SELECT COUNT(b_id) FROM BOARDT";
ArrayList<BoardBean> boardList = new ArrayList<BoardBean>();//ArrayList로 게시글들을 받음
try {
conn = getConnection();
// stmt = conn.createStatement();// DB에 SQL 전달(SQL문 사용하기 위한 참조변수 선언
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
// 매개변수 (,변경전 내용을 저장하겠다.)
// DB에 SQL 전달(SQL문 사용하기 위한 참조변수 선언
pageSet = stmt.executeQuery(sql2);//쿼리 결과를 rs에 받음(select 조회문은 executeQuery 메소드 처리
if(pageSet.next()) {
dbCount = pageSet.getInt(1);
pageSet.close();
}
if (dbCount % BoardBean.pageSize == 0) { //pageCount 세팅(페이지 개수를 알려주기 위해 사용)
//80 % 10 = 0
BoardBean.pageCount = dbCount / BoardBean.pageSize; //80 /10
} else {//84 % 10 = 4
BoardBean.pageCount = dbCount / BoardBean.pageSize +1 ; //80/10 +1
}
if (pageNumber != null) {
BoardBean.pageNum = Integer.parseInt(pageNumber); //매개변수에 해당되는 pageNumber 세팅
absoultepage = (BoardBean.pageNum - 1) * BoardBean.pageSize + 1;
}
rs = stmt.executeQuery(sql);//쿼리 결과를 rs에 받음(select 조회문은 executeQuery 메소드 처리
if (rs.next()) {//while문을 감쌈
rs.absolute(absoultepage);
int count = 0;
while(count < BoardBean.pageSize) {//pageSize수 (10번) 만큼 반복
//다음(여러개의) 쿼리 데이터가 있는 경우를 조건문으로 줌.
BoardBean board = new BoardBean();
//결과값을 세팅
board.setB_id(rs.getInt(1));//아이디는 INT이므로 getInt로 해야함
board.setB_name(rs.getString(2));
board.setB_email(rs.getString(3));
board.setB_title(rs.getString(4));
board.setB_content(rs.getString(5));
board.setB_date(rs.getTimestamp(6));
board.setB_hit(rs.getInt(7));//조회수는 INT이므로 getInt로 해야함
board.setB_pwd(rs.getString(8));//조회수는 INT이므로 getInt로 해야함
board.setB_ip(rs.getString(9));//조회수는 INT이므로 getInt로 해야함
board.setB_ref(rs.getInt(10));//조회수는 INT이므로 getInt로 해야함
board.setB_step(rs.getInt(11));//조회수는 INT이므로 getInt로 해야함
board.setB_level(rs.getInt (12));//조회수는 INT이므로 getInt로 해야함
// 데이터가 제대로 들어갔는지 확인 해야함
// System.out.println("@@@@#### board.getB_id()=====>"+board.getB_id());
// System.out.println("@@@@#### board.getB_name()=====>"+board.getB_name());
// System.out.println("@@@@#### board.getB_email()=====>"+board.getB_email());
// System.out.println("@@@@#### board.getB_title()=====>"+board.getB_title());
// System.out.println("@@@@#### board.getB_content()=====>"+board.getB_content());
// System.out.println("@@@@#### board.getB_pwd()=====>"+board.getB_pwd());
// System.out.println("@@@@####");
boardList.add(board);//반복하면서 게시글들을 쌓음
if (rs.isLast()) {//결과값이 마지막이면 빠져나오기
break;
} else {
rs.next();//마지막이 아니면 계속 진행
}
count++;
}
}
} catch(SQLException ex) {
ex.printStackTrace();
} finally {
try{//자원반납(순서 중요)
if(rs != null) rs.close();
if(stmt != null) stmt.close();
if(conn != null) conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
return boardList;
}
// 5. 리턴타입이 BoardBean인 getBoard() 메소드 추가
public BoardBean getBoard (int bid, boolean hitadd) throws Exception{
//글번호만 넘기면 알아서 내용이 넘어가는 메소드
//조회 수 때문에 분기처리 해가
Connection conn = null;//데이터 베이스 접속
PreparedStatement pstmt = null;// DB에 SQL 전달
PreparedStatement pstmtup = null;// 조회수 업데이트
ResultSet rs = null;
//db 정보 받기 위함
BoardBean board = null;
String sql = "";//해당 번호의 데이터 출력되게 쿼리 작성
try {
conn = getConnection();
if (hitadd==true) {
//조회수 업데이트 추가함
sql = "UPDATE BOARDT SET b_hit=b_hit+1 WHERE b_id=?";
pstmt = conn.prepareStatement(sql);//pstmt객체로 받음
// DB에 SQL 전달(SQL문 사용하기 위한 참조변수 선언
pstmt.setInt(1, bid);//조건이 하나이기 때문에 (?가 하나임)
// rs = pstmt.executeQuery();//쿼리 결과를 rs에 받음(select 조회문은 executeQuery 메소드 처리
pstmt.executeUpdate();//업데이트니깐 업데이트로 바꿔줌
//pstmtup.close();
//업데이트 추가 끝!
}
sql = "SELECT b_id\r\n" +
" , b_name\r\n" +
" , b_email\r\n" +
" , b_title\r\n" +
" , b_content\r\n" +
" , b_date\r\n" +
" , b_hit\r\n" +
" , b_pwd\r\n" +
" , b_ip\r\n" +
" , b_ref\r\n" +
" , b_level\r\n" +
" , b_step\r\n" +
" FROM BOARDT\r\n" +
" WHERE b_id=?";//해당 번호의 데이터 출력되게 쿼리 작성
pstmt = conn.prepareStatement(sql);//pstmt객체로 받음
// DB에 SQL 전달(SQL문 사용하기 위한 참조변수 선언
pstmt.setInt(1, bid);//조건이 하나이기 때문에 (?가 하나임)
rs = pstmt.executeQuery();//select 문이니깐 익스큐트 쿼리
if(rs.next()) {//다음(여러개의) 쿼리 데이터가 있는 경우를 조건문으로 줌.
board = new BoardBean();//객체생성(리턴값이 board)
board.setB_id(rs.getInt(1));
//board.setB_id(bid);도 가능함
board.setB_name(rs.getString(2));
board.setB_email(rs.getString(3));
board.setB_title(rs.getString(4));
board.setB_content(rs.getString(5));
board.setB_date(rs.getTimestamp(6));
board.setB_hit(rs.getInt(7));
board.setB_pwd(rs.getString(8));
board.setB_ip(rs.getString(9));
board.setB_ref(rs.getInt(10));//조회수는 INT이므로 getInt로 해야함
board.setB_step(rs.getInt(11));//조회수는 INT이므로 getInt로 해야함
board.setB_level(rs.getInt (12));//조
//
//// 데이터가 제대로 들어갔는지 확인 해야함
System.out.println("@@@@#### board.setB_id()=====>"+board.getB_id());
System.out.println("@@@@#### board.setB_name()=====>"+board.getB_name());
System.out.println("@@@@#### board.setB_email()=====>"+board.getB_email());
System.out.println("@@@@#### board.setB_title()=====>"+board.getB_title());
System.out.println("@@@@#### board.setB_content()=====>"+board.getB_content());
//System.out.println("@@@@#### board.setB_pwd()=====>"+board.setB_pwd(sql));
}
} catch(SQLException ex) {
ex.printStackTrace();
} finally {
try{//자원반납(순서 중요)
if(rs != null) rs.close();
if(conn != null) conn.close();
if(pstmt != null) pstmt.close();
}catch(Exception e){
e.printStackTrace();
}
}
return board;
}
// 6.deleteBoard() 메소드 => 삭제할 글 비밀번호 확인하는 메소드
public int deleteBoard (int b_id, String b_pwd) throws Exception{//글번호만 넘기면 알아서 내용이 넘어가는 메소드
// id와 pwd를 받아 삭제하는 메소드
Connection conn = null;//데이터 베이스 접속
PreparedStatement pstmt = null;// DB에 SQL 전달
ResultSet rs = null;
int re = -1;
String sql = "";//해당 번호의 데이터 출력되게 쿼리 작성
String pwd = "";//비밀번호
try {
conn = getConnection();
sql = "SELECT B_PWD FROM BOARDT where B_ID=?"; // 글 번호에 따른 비밀번호 가지고 오기
pstmt = conn.prepareStatement(sql);//pstmt객체로 받음
pstmt.setInt(1, b_id);//값을 집어넣음(쿼리의 ?부분)
rs = pstmt.executeQuery();
if(rs.next()) {//다음(여러개의) 쿼리 데이터가 있는 경우를 조건문으로 줌.
pwd = rs.getString(1);
//비밀번호를
if (pwd.equals(b_pwd)) {
sql = "DELETE FROM BOARDT WHERE B_ID=?";
pstmt = conn.prepareStatement(sql);//pstmt객체로 쿼리를 받음
pstmt.setInt(1, b_id);
pstmt.executeUpdate();
re = 1;
}else {
re =0;
}
}
} catch(SQLException ex) {
System.out.println("삭제 실패");
ex.printStackTrace();
} finally {
try{//자원반납(순서 중요)
if(rs != null) rs.close();
if(conn != null) conn.close();
if(pstmt != null) pstmt.close();
}catch(Exception e){
e.printStackTrace();
}
}
return re;
}
//7.테이블 수정 editBoard 메소드
public int editBoard (BoardBean board) throws Exception{
int re = -1;
Connection conn = null;//데이터 베이스 접속
PreparedStatement pstmt = null;// DB에 SQL 전달
ResultSet rs = null;
String sql ="";
String pwd = "";//비밀번호
try {
conn = getConnection();
sql = "SELECT B_PWD FROM BOARDT where B_ID=?"; // 글 번호에 따른 비밀번호 가지고 오기
pstmt = conn.prepareStatement(sql);//pstmt객체로 받음
pstmt.setInt(1, board.getB_id());//값을 집어넣음(쿼리의 ?부분),board 객체를 이용하여 b_id 가지고 오기
rs = pstmt.executeQuery();
if (rs.next()) {
pwd = rs.getString(1);
if (pwd.equals(board.getB_pwd())) {
sql="UPDATE BOARDT \r\n" +
" SET B_NAME=?\r\n" +
" , B_EMAIL=?\r\n" +
" , B_TITLE=?\r\n" +
" , B_CONTENT=?\r\n" +
" WHERE B_ID=?";
pstmt = conn.prepareStatement(sql);//pstmt객체로 쿼리를 받음
pstmt.setString(1,board.getB_name());
pstmt.setString(2,board.getB_email());
pstmt.setString(3,board.getB_title());
pstmt.setString(4,board.getB_content());
pstmt.setInt(5, board.getB_id());
pstmt.executeUpdate();
re = 1;
}else {
re =0;//비밀번호가 같지 않은것
}
}
} catch(SQLException ex) {
System.out.println("수정 실패");
ex.printStackTrace();
} finally {
try{//자원반납(순서 중요)
if(rs != null) rs.close();
if(conn != null) conn.close();
if(pstmt != null) pstmt.close();
}catch(Exception e){
e.printStackTrace();
}
}
return re;
}
}
function check_ok(){
if(reg_frm.b_name.value.length == 0){
alert("이름을 써주세요.");
reg_frm.b_name.focus();
return;//아이디가 없으면 리턴
}
if(reg_frm.b_title.value.length == 0){
alert("제목을 써주세요.");
reg_frm.b_title.focus();
return;// 글제목 없으면 리턴
}
if(reg_frm.b_content.value.length == 0){
alert("내용을 써주세요.");
reg_frm.b_content.focus();
return;//글 내용이 없으면 리턴
}
if(reg_frm.b_pwd.value.length == 0){
alert("비밀번호를 써주세요.");
reg_frm.b_pwd.focus();
return;//비밀번호가 없으면 리턴
}
document.reg_frm.submit(); //입력값이 조건에 다 맞으면 action="write_ok.jsp"으로 가겠다.(전송/submit)
}
function delete_ok(){
if(del_frm.b_pwd.value.length == 0){
alert("비밀번호를 써주세요.");
del_frm.b_pwd.focus();
return;//비밀번호가 없으면 리턴
}
document.del_frm.submit();
}
<%@page import="magic.board.BoardBean"%>
<%@page import="magic.board.BoardDBBean"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String pageNum = request.getParameter("pageNum");//pageNum을 받음
int b_id=0, b_ref=1, b_step=0, b_level=0;//(초기값인 경우
String b_title="";
if(request.getParameter("b_id") != null){
b_id = Integer.parseInt(request.getParameter("b_id"));
}
BoardDBBean db = BoardDBBean.getInstance();
BoardBean board = db.getBoard(b_id, false);//조회수 증가 x
if(board != null){//board가 널값이 아니면(답변글이면)
b_title = board.getB_title();
b_ref = board.getB_ref();
b_step = board.getB_step();
b_level = board.getB_level();
}
%>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script language="JavaScript" src="board.js" charset="utf-8"></script>
</head>
<body>
<center>
<h1>글 올 리 기</h1>
<form name="reg_frm" method="post" action="write_ok.jsp">
<input type="hidden" name="b_id" value="<%= b_id %>">
<input type="hidden" name="b_ref" value="<%= b_ref %>">
<input type="hidden" name="b_step" value="<%= b_step %>">
<input type="hidden" name="b_level" value="<%= b_level %>">
<table>
<tr height="30">
<td width="80">작성자</td>
<td width="140">
<input type="text" name="b_name" size="10" maxlength="20">
</td>
<td width="80">이메일</td>
<td width="240">
<input type="text" name="b_email" size="24" maxlength="50">
</td>
</tr>
<tr height="30">
<td width="80">글제목</td>
<td colspan="3" width="460">
<%
if(b_id == 0){//새로운 글이면
%>
<input type="text" name="b_title" size="55" maxlength="80">
<%
}else{
%>
<input type="text" name="b_title" size="55" maxlength="80"
value="[답변]:<%= b_title %>">
<%
}
%>
</td>
</tr>
<tr>
<td colspan="4">
<textarea name="b_content" rows="10" cols="65"></textarea>
</td>
</tr>
<tr height="30">
<td width="80">암 호</td>
<td colspan="3" width="460">
<input type="password" name="b_pwd" size="12" maxlength="12">
</td>
</tr>
<tr height="50" align="center">
<td colspan="4">
<input type="button" value="글쓰기" onclick="check_ok()">
<input type="reset" value="다시작성">
<input type="button" value="글목록" onclick="location.href='list.jsp?pageNum=<%=pageNum%>'">
<!-- 페이지 목록에 맞춰서 이동할 수 있도록 함 -->
</td>
</tr>
</table>
</form>
</center>
</body>
</html>
<%@page import="java.net.InetAddress"%>
<%@page import="magic.board.BoardDBBean"%>
<%@page import="java.sql.Timestamp"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("UTF-8");
%>
<jsp:useBean class="magic.board.BoardBean" id="board"></jsp:useBean>
<jsp:setProperty property="*" name="board"/>
<%
InetAddress address = InetAddress.getLocalHost();
String ip = address.getHostAddress();
board.setB_date(new Timestamp(System.currentTimeMillis()));
//board.setB_ip(request.getRemoteAddr());
board.setB_ip(ip);
BoardDBBean db = BoardDBBean.getInstance();
int re = db.insertBoard(board);
if(re == 1){
response.sendRedirect("list.jsp");
}else{
response.sendRedirect("write.jsp");
}
%>
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="magic.board.BoardBean"%>
<%@page import="magic.board.BoardDBBean"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String pageNum = request.getParameter("pageNum");//pageNum을 받음
int bid = Integer.parseInt(request.getParameter("b_id"));
//list.jsp에서 <a href="show.jsp?b_id=..> 에서 b_id가 넘어옴
//그후 캐스팅!!
BoardDBBean db = BoardDBBean.getInstance();
//getBoard 메소드를 가지고 와야함(제네릭) 그러기 위해서는 객체생성을 먼저해야함
//getBoard db객체로 받음.(getInstace하면 instance가 리턴됨)
BoardBean board = db.getBoard(bid, true);
//BoardBean board = db.getBoard(bid);
//getBoard 메소드 호출하여 BoardBean 받음(리턴타입은 board)
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
%>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<center>
<h1>글 내 용 보 기</h1>
<table border="1" width="600" cellspacing="0">
<tr height="30" align="center">
<td width="100">글번호</td>
<td width="200">
<%= bid %>
</td>
<td width="100">조회수</td>
<td width="200">
<%= board.getB_hit() %>
</td>
</tr>
<tr height="30" align="center">
<td width="100">작성자</td>
<td width="200">
<%= board.getB_name() %>
<!-- board 객체를 이용하여 getB_.. 사용! -->
</td>
<td width="100">작성일</td>
<td width="200">
<%-- <%= board.getB_date() %> --%>
<%= sdf.format(board.getB_date()) %>
<!-- board 객체를 이용하여 getB_.. 사용! -->
</td>
</tr>
<tr height="30" align="center">
<td width="100">글제목</td>
<td width="200" align="left">
<%= board.getB_title() %><!-- board 객체를 이용하여 getB_.. 사용! -->
</td>
</tr>
<tr height="30" align="center">
<td width="100">글내용</td>
<td width="200" align="left">
<%= board.getB_content() %><!-- board 객체를 이용하여 getB_.. 사용! -->
</td>
</tr>
<tr height="30">
<td colspan="4" align="right">
<!-- 페이지 목록에 맞춰야 해서 모두 쿼리스트링을 사용하여 pageNum=<%=pageNum%> 넣어야함 -->
<input type="button" value="글수정" onclick="location.href='edit.jsp?b_id=<%= bid %>&pageNum=<%= pageNum %>'">
<!-- 해당 게시글의 글번호에 맞는 글 수정로 이동 -->
<input type="button" value="글삭제" onclick="location.href='delete.jsp?b_id=<%= bid %>&pageNum=<%= pageNum %>'">
<!-- 해당 게시글의 글번호에 맞는 글 삭제로 이동 -->
<input type="button" value="답변글" onclick="location.href='write.jsp?b_id=<%= bid %>&pageNum=<%= pageNum %>'">
<!-- 해당 게시글의 글 번호에 맞는 답변글로 이동 -->
<input type="button" value="글목록" onclick="location.href='list.jsp?pageNum=<%=pageNum%>'">
</td>
</tr>
</table>
</center>
</body>
</html>
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.sql.Timestamp"%>
<%@page import="magic.board.BoardBean"%>
<%@page import="java.util.ArrayList"%>
<%@page import="magic.board.BoardDBBean"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String pageNum = request.getParameter("pageNum");//pageNum을 받음
if(pageNum == null){//list를 처음 실행하였을때 아무것도 없을때 보여줄 페이지
pageNum ="1";
}
BoardDBBean db = BoardDBBean.getInstance();
//listBoard 메소드를 가지고 와야함(제네릭) 그러기 위해서는 객체생성을 먼저해야함
//instance를 db객체로 받음.(getInstace하면 instance가 리턴됨)
ArrayList<BoardBean> boardList = db.listBoard(pageNum);
//listBoard메소드 호출하여 ArrayList로 받음(리턴타입은 ArrayList<BoardBean>)
int b_id, b_hit, b_level=0;
String b_name, b_email, b_title, b_content;
Timestamp b_date;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
%>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<center>
<h1>게시판에 등록된 글 목록 보기</h1>
<table width="600">
<tr>
<td align="right">
<a href="write.jsp?pageNum=<%=pageNum%>">글 쓰 기</a>
<!-- 페이지 목록 번호에 맞게 글 쓰기 이동 -->
</td>
</tr>
</table>
</center>
<center>
<table border="1" width="800" cellspacing="0">
<!-- <form name="reg_frm" method="post" action="write_ok.jsp"> -->
<tr height="25">
<td width="40" align="center">번호</td>
<td width="450" align="center">글제목</td>
<td width="120" align="center">작성자</td>
<td width="130" align="center">작성일</td>
<td width="60" align="center">조회수</td>
</tr>
<%
for(int i=0; i<boardList.size(); i++){//게시글 갯수만큼 반복
BoardBean board = boardList.get(i);
//ArrayList에 담았던 객체들의 값을 가지고 옴
//가지고 올때는 반대방향으로 (listBoard 메소드에서 보낸 값을 반대로 풀면 됨)
//포장했던걸 푸는 느낌
//board객체를 하나씩 풀기
b_id = board.getB_id();
b_name = board.getB_name();
b_email = board.getB_email();
b_title = board.getB_title();
b_content = board.getB_content();
b_date = board.getB_date();
b_hit = board.getB_hit();
b_level = board.getB_level();
%>
<tr height="25" bgcolor="#f7f7f7"
onmouseover="this.style.backgroundColor='#eeeeef'"
onmouseout="this.style.backgroundColor='#f7f7f7'">
<td align="center"><%= b_id %></td>
<td>
<%
if(b_level > 0){//답글인경우 공백 및 이미지 삽입
for(int j=0; j<b_level; j++){//여백주는걸 반복한다.(댓글의 갯수에 맞게.(대댓글이면 2번 여백을 줌)
%>
<%
}
%>
<img src="../images/AnswerLine.gif" width="16" height="16">
<%
}
%>
<a href="show.jsp?b_id=<%= b_id %>&pageNum=<%= pageNum %>">
<!-- 쿼리 스트링 사용해서 표현식으로 몇번째에 갈건지 설정 + & 사용하여 페이지 수 작성-->
<%= b_title %><!-- 새로운 글이나 댓글의 제목 -->
</a>
</td>
<td align="center">
<a href="mailto:<%= b_email %>">
<%= b_name %>
</a>
</td>
<td align="center">
<%-- <%= b_date %> --%>
<%= sdf.format(b_date) %>
</td>
<td align="center">
<%= b_hit %>
</td>
</tr>
<%
}
%>
<!-- </form> -->
</table>
<%= BoardBean.pageNumber(4) %>
<!-- return 받아서 4페이지씩 나눠서 출력 -->
</center>
</body>
</html>
<%@page import="magic.board.BoardBean"%>
<%@page import="magic.board.BoardDBBean"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String pageNum = request.getParameter("pageNum");//pageNum을 받음
int b_id = Integer.parseInt(request.getParameter("b_id"));
//b_id값을 받아옴.
BoardDBBean db = BoardDBBean.getInstance();
//instance를 db객체로 받음.(객체 생성)
BoardBean board = db.getBoard(b_id, false);
//수정할때는 조회수가 올라가지 않도록 false 처리함.
%>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script language="JavaScript" src="board.js" charset="utf-8"></script>
</head>
<body>
<center>
<h1>글 올 리 기</h1>
<form name="reg_frm" method="post" action="edit_ok.jsp?b_id=<%= b_id %>&pageNum=<%= pageNum %>">
<!-- 쿼리스트링 꼬오옥 생각하기 -->
<table>
<tr height="30">
<td width="80">작성자</td>
<td width="140">
<input type="text" name="b_name" size="10" maxlength="20" value="<%= board.getB_name() %>">
</td>
<td width="80">이메일</td>
<td width="240">
<input type="text" name="b_email" size="24" maxlength="50" value="<%= board.getB_email() %>">
</td>
</tr>
<tr height="30">
<td width="80">글제목</td>
<td colspan="3" width="460">
<input type="text" name="b_title" size="55" maxlength="80" value="<%= board.getB_title() %>">
</td>
</tr>
<tr>
<td colspan="4">
<textarea name="b_content" rows="10" cols="65">
<%= board.getB_content() %>
</textarea>
</td>
</tr>
<tr height="30">
<td width="80">암 호</td>
<td colspan="3" width="460">
<input type="password" name="b_pwd" size="12" maxlength="12">
</td>
</tr>
<tr height="50" align="center">
<td colspan="4">
<input type="button" value="글수정" onclick="check_ok()">
<input type="reset" value="다시작성">
<input type="button" value="글목록" onclick="location.href='list.jsp?pageNum=<%=pageNum%>'">
</td>
</tr>
</table>
</form>
</center>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="magic.board.BoardDBBean" %>
<%
request.setCharacterEncoding("UTF-8");
%>
<!-- 자바 빈 위에 UTF-8을 넣어야함 안그러면 글자가 깨짐 -->
<jsp:useBean id="board" class="magic.board.BoardBean"></jsp:useBean>
<!-- 한번에 모든 값들을 가지고옴 -->
<jsp:setProperty property="*" name="board"/>
<!-- 한번에 모든 값들을 받아와서 세팅 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String pageNum = request.getParameter("pageNum");//pageNum을 받음
BoardDBBean db = BoardDBBean.getInstance();
//getInstance로 BoardDBBean 객체 생성
int re = db.editBoard(board);
// String b_pwd = request.getParameter("b_pwd");
// 비밀번호 editBoard 메소드에서 안받음 board 객체로 받기 때문에 이런식으로 값을 받는거 아님!!!
// int re = db.deleteBoard(b_id, b_pwd);
//deleteBoard 메소드 호출하여 글번호와 비밀번호 넘김
if(re == 1){//수정성공햇을 때
// response.sendRedirect("list.jsp");
response.sendRedirect("list.jsp?pageNum="+pageNum);
//쿼리 스트링이 아닌 방식으로 글 목록번호에 맞게 링크 이동함.
}else if(re == 0){//비밀번호가 틀릴 때
%>
<script language ="JavaScript">
alert("비밀번호가 맞지 않습니다.");
history.go(-1);
</script>
<%
}else if(re == -1){//수정 실패했을 때
%>
<script language ="JavaScript">
alert("수정에 실패하였습니다.");
history.go(-1);
</script>
<%
}
%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="magic.board.BoardDBBean" %>
<%
request.setCharacterEncoding("UTF-8");
%>
<!-- 자바 빈 위에 UTF-8을 넣어야함 안그러면 글자가 깨짐 -->
<jsp:useBean id="board" class="magic.board.BoardBean"></jsp:useBean>
<!-- 한번에 모든 값들을 가지고옴 -->
<jsp:setProperty property="*" name="board"/>
<!-- 한번에 모든 값들을 받아와서 세팅 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String pageNum = request.getParameter("pageNum");//pageNum을 받음
BoardDBBean db = BoardDBBean.getInstance();
//getInstance로 BoardDBBean 객체 생성
int re = db.editBoard(board);
// String b_pwd = request.getParameter("b_pwd");
// 비밀번호 editBoard 메소드에서 안받음 board 객체로 받기 때문에 이런식으로 값을 받는거 아님!!!
// int re = db.deleteBoard(b_id, b_pwd);
//deleteBoard 메소드 호출하여 글번호와 비밀번호 넘김
if(re == 1){//수정성공햇을 때
// response.sendRedirect("list.jsp");
response.sendRedirect("list.jsp?pageNum="+pageNum);
//쿼리 스트링이 아닌 방식으로 글 목록번호에 맞게 링크 이동함.
}else if(re == 0){//비밀번호가 틀릴 때
%>
<script language ="JavaScript">
alert("비밀번호가 맞지 않습니다.");
history.go(-1);
</script>
<%
}else if(re == -1){//수정 실패했을 때
%>
<script language ="JavaScript">
alert("수정에 실패하였습니다.");
history.go(-1);
</script>
<%
}
%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@page import="magic.board.BoardDBBean" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<%
String pageNum = request.getParameter("pageNum");//pageNum을 받음
int b_id = Integer.parseInt(request.getParameter("b_id"));
//입력 받은 id 값을 onclick으로 넘겨줌
String b_pwd = request.getParameter("b_pwd");
// 비밀번호도 다시 받음
BoardDBBean db = BoardDBBean.getInstance();
//getInstance로 BoardDBBean 객체 생성
int re = db.deleteBoard(b_id, b_pwd);
//deleteBoard 메소드 호출하여 글번호와 비밀번호 넘김
if(re == 1){//비밀번호가 동일 할 경우
response.sendRedirect("list.jsp?pageNum="+pageNum);
}else if(re == 0){//비밀번호가 다른 경우
%>
<script language="JavaScript">
alert("비밀번호가 맞지 않습니다.");
history.go(-1);//이전페이지로 이동
</script>
<%
}else if(re == -1){//글번호가 없는 경우(삭제 실패한 경우)
%>
<script language="JavaScript">
alert("삭제에 실패하였습니다.");
history.go(-1);
</script>
<%
}
%>
<form name="폼이름" action="데이터전송페이지” method="post" enctype="multipart/form-data">
InputStream is = request.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
br.readLine() //한줄 씩 읽음
먼저 위의 사진처럼 fileUpload폴더안의 파일들을 생성
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<form method="post" action="upload.jsp" enctype="multipart/form-data">
자료 올리기 <br>
파일 선택하기 :
<input type="file" name="filesel" size="50">
<hr><br>
<input type="submit" value="자료 올리기">
</form>
</body>
</html>
<%@page import="java.io.InputStreamReader"%>
<%@page import="java.io.BufferedReader"%>
<%@page import="java.io.InputStream"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%
InputStream is = request.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String str = null;
while((str = br.readLine()) != null){
%>
<%= str %>
<%
}
%>
사진과 같이 작동함
그래서 파일 업로드 설정이 필요함.
그후 사진과 같이 upload.jar 추가
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<form action="uploadFile.jsp" method="post" enctype="multipart/form-data">
1. 파일 지정하기 : <input type="file" name="filesel01" size="50">
2. 파일 지정하기 : <input type="file" name="filesel02" size="50">
3. 파일 지정하기 : <input type="file" name="filesel03" size="50">
4. 파일 지정하기 : <input type="file" name="filesel04" size="50">
5. 파일 지정하기 : <input type="file" name="filesel05" size="50">
<hr><br>
<input type="submit" value="자료 올리기">
</form>
</body>
</html>
<%@page import="com.jspsmart.upload.File"%>
<%@page import="com.jspsmart.upload.SmartUpload"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%
SmartUpload upload = new SmartUpload();//객체생성
upload.initialize(pageContext);//기본 객체 초기화
upload.upload();//upload 메소드 호출
int last = upload.getFiles().getCount();//파일 갯수
int cnt = 0;
for(int i=0; i<last; i++){//파일 업로드 갯수만큼 반복
File file = upload.getFiles().getFile(i);
if(!file.isMissing()){
file.saveAs("/upload/"+file.getFieldName());//파일 이름을 저장하겠다.
out.print("폼 태그 필드 이름 : "+file.getFieldName()+"<br>");
out.print("파일 이름 : "+file.getFileName()+"<br>");
out.print("파일 크기 : "+file.getSize()+"<br>");
out.print("파일 확장자 : "+file.getFileExt()+"<br>");
out.print("파일 경로 : "+file.getFilePathName()+"<br>");
out.print("<br>================================<br>");
cnt++;
}
}
out.print(""+cnt+"개를 업로드 했습니다.");
%>
그후 코드 실행하기
확인해보면 upload 파일에 파일들이 올라감