본문 바로가기
CLASS/JSP

#4-1 / 상품 등록 및 삭제

by eungSe__ 2024. 6. 27.

with 짝꿍

A part : 상품 등록페이지 A (sql insert 활용) => product_insert.jsp

B part : 상품 정보 출력 리스트 페이지 B (sql select 활용) => product_list.jsp

 

db에 저장된 내용이 모두 출력되어야 함

 

⚡ DB table 생성

create table product(
pidx int(7) unsigned not null auto_increment,
pcode char(7) not null,
pname varchar(100) not null,
pmoney int(8) not null,
pdate timestamp not null default current_timestamp,
primary key(pidx),
unique pd(pcode)
);


만약 sql 날짜만 지정하고 싶다면? 
pdate date not null default (curdate()),

 

⚡ db연결
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%
 String db_driver = "com.mysql.cj.jdbc.Driver";
String db_url = "jdbc:mysql://localhost:3306/erp";
String db_user = "hana";
String db_pass = "hana1234";
Connection dbcon = null;

try{
	Class.forName(db_driver);
	dbcon = DriverManager.getConnection(db_url,db_user,db_pass);
}catch(Exception e){
	out.print("db 접속이 올바르지 않습니다");
}

%>

 

⚡ insert

- 입력받는 jsp (product_insert.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>상품 등록페이지 A (sql insert 활용)</title>
</head>
<body>
	<form id="frm">
    		<!-- 사실 상품코드는 자동으로 생성 되어야 함 -->
		상품 코드 : <input type="text" name="pcode"><br>
		상품명 : <input type="text" name="pname"><br>
		상품가격 : <input type="text" name="pmoney" maxlength="8"><br><br>
		<input type="button" value="상품추가" onclick="add_price()">
	</form>
</body>

<script type="text/javascript">
	function add_price(){
		if(frm.pcode.value == ""){
			alert("상품 코드를 입력하세요")
		}else if(frm.pname.value == ""){
			alert("상품명을 입력하세요")
		}else if(frm.pmoney.value == ""){
			alert("상품가격을 입력하세요")
		}else{
			frm.method="post";
			frm.action="./product_save.jsp";
			frm.submit();
		}
	}
</script>

</html>



- product_save.jsp

<%@page import="java.sql.PreparedStatement"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ include file="./dbconfig.jsp"%>

<%
	request.setCharacterEncoding("utf-8");

	String pcode = request.getParameter("pcode");
	String pname = request.getParameter("pname");
	String pmoney = request.getParameter("pmoney");
	
	String sql = "insert into product values ('0',?,?,?,now())";
	PreparedStatement ps = dbcon.prepareStatement(sql);
	ps.setString(1, pcode);
	ps.setString(2, pname);
	ps.setString(3, pmoney);
	
	int result = ps.executeUpdate();
	if(result > 0){
		out.print("<script>alert('상품 등록이 완료되었습니다'); "
                          +"location.href='./product_list.jsp'</script>");
	}
	
	ps.close();
	dbcon.close();
%>

 

 

 

🔽  list 출력

 

⚡ list 출력 및 delete

👀 list 출력시
- list가 0개일때 보이는 영역도 필요!
- 마지막에 등록한게 제일 위로 가게 출력 : select ~ order by colomn명 desc;

👀 list 삭제시
- 데이터가 삭제되므로 confirm으로 한번 확인할 것!
- 선택삭제 : 배열로 받음 
   => getParameterValues : 동일 name을 사용시 해당 값을 원시배열로 받아서 처리
- DDL문을 반복문 안에 넣을시 메모리를 많이 잡아먹는다!

체크된 내용을 전송하는 형태 ( Front-end와 소통으로 전송방식이 변경 됨 )
1. hidden을 이용해서 문자배열 값으로 전송
2. name값 형태로 값을 전송 요고루 해볼거임
3. storage에 배열값을 저장 후 전송

- product_list.jsp
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ include file="./dbconfig.jsp" %>
<%
	String sql = "select count(*) as ctn from product";
	String sql2 = "select * from product order by pidx desc";

	PreparedStatement ps = dbcon.prepareStatement(sql);
	ResultSet rs = ps.executeQuery();
	rs.next();
	
	//총 data 갯수
	Integer ea = Integer.parseInt(rs.getString("ctn"));
	
	ps=dbcon.prepareStatement(sql2);
	ResultSet rs2 = ps.executeQuery();
%>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>상품 정보 출력 리스트 페이지 B - list 출력 및 체크박스 선택삭제 가능 기능</title>
</head>
<body>
	<form id="frm">
		<table border="1" cellpadding="0" cellspacing="0">
			<thead>
				<tr>
					<th><input type="checkbox" id="all_check" onclick="all_ck(this.checked)"></th>
					<th>상품코드</th>
					<th>상품명</th>
					<th>상품가격</th>
				</tr>
			</thead>
			<tbody>
				<% 
				if(ea <= 0){
				%>
				<tr align="center"><td colspan="4">등록된 상품이 없습니다.</td></tr>
				<%
				}else{
					while(rs2.next()){
				%>
				<tr>
					<td><input type="checkbox" name="ck" value="<%= rs2.getString("pidx")%>" onclick="ckcount()"></td>
					<td><%= rs2.getString("pcode")%></td>
					<td><%= rs2.getString("pname")%></td>
					<td><%= rs2.getString("pmoney")%></td>
				</tr>
				<%
					}
				}
				%>
			</tbody>
		</table>
		<input type="button" value="선택삭제" onclick="delete_data()">
		<input type="button" value="상품등록" onclick="gopage()">
	</form>
</body>
<%
ps.close();
dbcon.close();
%>
<script>
	//선택삭제 버튼
	function delete_data(){
		var count = 0; //선택한 체크박스 카운팅하기위한 변수
		var ckname_arr = document.getElementsByName("ck");
		var w=0;
		while(w < ckname_arr.length){ //반복문으로 체크갯수 파악
			if(ckname_arr[w].checked == true){
				count++;	
			}
			w++;
		}

		if(count > 0){
			if(confirm("해당 데이터 삭제시 복구되지 않습니다")){
				frm.method="post";
				frm.action="./product_del.jsp";
				frm.submit();
			}
		}else{
			alert("선택한 상품이 한개 이상 체크되어야 합니다");
		}
	}
	
	//하위 체크박스 모두 체크시 all_check check
	function ckcount(){
		var cc = 0;
		var ckname_arr = document.getElementsByName("ck");
		var w=0;
		while(w<ckname_arr.length){
			if(ckname_arr[w].checked == true){
				cc++;
			}
			w++;
		}
		if(cc == ckname_arr.length){
			document.getElementById("all_check").checked = true;
		}else{
			document.getElementById("all_check").checked = false;
		}
	}
	
	//전체선택 체크박스
	function all_ck(z){
		//checkbox에 name,class로 처리한 경우 중복사용 가능 => id는 절대 중복 불가능
		var ckname_arr = document.getElementsByName("ck"); 
		var w=0;
		while(w<ckname_arr.length){
			ckname_arr[w].checked = z;
			w++;
		}
	}

	function gopage(){
		location.href = "./product_insert.jsp";
	}
</script>
</html>



- product_del.jsp

<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.util.Arrays"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ include file="./dbconfig.jsp" %>
<%
	request.setCharacterEncoding("utf-8");
	
	String ck[] = request.getParameterValues("ck"); //배열로 받는 법
	PreparedStatement ps = null;
	int w=0;
	//ddl문을 반복문 안에 넣을시 메모리를 많이 잡아먹는다!
	String sql = "delete from product where pidx=?";
	while(w<ck.length){
		//여기에 삭제 query작성
		ps = dbcon.prepareStatement(sql);
		ps.setString(1,ck[w]);
		ps.executeUpdate();
		
		w++;
	}
	out.print("<script>alert('해당 데이터를 정상적으로 삭제했습니다');location.href='./product_list.jsp';</script>");
	
	dbcon.close();
%>


삭제완료