👀 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();
%>