# sms 수신 여부 별 검색옵션
● 출력할 형식 : 아이디, 고객명, 통신사, 전화번호, 이메일 sms,이메일 수신여부 다 select 해와야함
# db 에서 데이터 select 해오기
● DB 연동 : include file="./dbconfig.jsp"
db 연동한 dbconfig.jsp를 로드
● sql 문법작성 :
① 광고수신 radio를 선택 후 해당 내용을 database쿼리문에 반영하기 위한 구문
② 일련번호 구하기 위한 구문
- setString 은 table, 컬럼명에는 사용하지 않음(value , where 절에 사용 O)
- PreparedStatement를 선언하여 연결을 했을 경우 새롭게 로드 할 필요 없음
# 이메일 수신여부 검색옵션 추가
● 조건이 추가됨 : sms 동의 Y,N / email 동의 Y,N
- sql 구문 추가
- 조건문 변경
- `name`값 추가 설정
● 리스트 출력하는 반복문 :
# radio 파트
● `name` 값을 ad_sms 로 설정
● if 문 사용해서 선택시 체크 되도록 설정
● checkbox, radio 사용 할 때 조건문 사용 시 '==' or equals 인지 유의 (자료형에 따라 달라짐)
전체 회원 리스트 출력
● hidden 으로 name 값 설정
- 'hidden' 으로 name 값 넘길 경우 초기 접속 시 넘겨지는 값은 무조건 null
→조건문의 조건 설정시 유의해야함 (조건을 null 로 핸들링해야함)
● 조건문을 null 로 핸들링
- 조건문으로 전체 검색과 수신여부 검색 선택시 각각 다른 sql 구문 적용되게끔 작성
회원정보 상세보기 페이지 (jsp10.jsp)
● POST로 전송
- 개인 정보이기 때문에 필히 post로 전송해야함(get으로 했다가는 db 다 뚫림)
- storage 를 이용해서 가져 온 후 삭제하는 방법 도 있음(jsp로는 한계가 있음)
- 별도 form 을 생성해서 전송, hidden 으로 name 생성
- hidden 에 midx 값 태워 전송 시킴 (jsp8.js)
● 전송시킨 값 받아 출력시키기
- 넘긴 midx 값 받아 해당 midx 에 해당하는 필요한 데이터 값 출력
- 사용자 리스트 버튼 작동 시 회원정보 리스트 페이지(jsp8.jsp)로 돌아가도록 작성
function gopage() {
location.href="./jsp8.jsp";
}
● 포인트(적립금) 출력
(sql 기초)
- 포인트 (적립금) sql 구문 작성 : DB에서 그냥 point를 검색하면 아래와 같이 리스트가 출력 되기 때문에 모든 포인트를 합해서 출력해야함
- sum 을 이용해서 포인트 총 합계 값인 total 값을 구하는 sql문 작성후 잘 나오는지 확인
- sql 문법에 이상 없으니 jsp에 작성
- DecimalFormat 라이브러리 이용해서 천단위마다 , 찍히게 끔 함
sql 구문 간소화 : view table 생성한 후 select
● sql 구문 작성하기 쉽게 처음부터 view table로 만들어 놓고 select
- 이렇게 두개로 나뉜 sql 구문을 하나로 코드 간소화 (select 와 join을 동시에 사용)
"select a.*, sum(b.mall_point) as total from mall_member as a join points as b where a.midx=? and a.mall_id=b.mall_id group by b.mall_id;";
a 테이블의 모든 컬럼과 b테이블의 포인트 합계값인 total을 중복되게 하지 않기 위해 b테이블의 id 로 그룹화.
a테이블의 id는 중복되는 값이 없음. b테이블의 아이디가 중복되는 값이기 때문에 b테이블의 id로 그룹화.
그러나 이렇게 하면 pays(상품구매리스트)를 같이 핸들링 할 수 없음
∴ ① mall_member join points (회원 정보 테이블과 포인트 테이블을 join) 를 view 로 만들고, ② pays(상품구매내역) 을 별도로 ddl 로 빼서 핸들링 해줘야 함
- ① view table (테이블 명 : total_page)생성 : mall_member 와 points 를 join 시킨 view table 생성 후 select
create view total_page as (select a.*, sum(b.mall_point) as total from mall_member as a join points as b where a.mall_id=b.mall_id group by b.mall_id);
- ② 상품 구매내역(pays)
● 마무리
- 라이브러리 닫기
정보 수정 페이지 (Ajax로 수정된 값 전송) - jsp11.jsp
● 기준이 되는 값 : auto_increment
- 절대 중복되지 않는 값으로 해야함 (이름,아이디 등은 중복 될 수 있음)
● a 태그에서 함수 호출 시 에러발생 해결법
- 엣지나 크롬에서는 잘 되나, 다른 브라우저(사파리)에서 안될때가 있음.(브라우저 특성상)
- javascript:void //해당 함수가 있을 때
- javascript void(): //함수가 없을때
● 개인정보 수정 버튼 핸들링
- body 에 hidden 의 `name` 값으로 고유값을 설정
- 수정된 값을 `name` 에 저장해 다시 보내줘야함
- 개인정보 수정 버튼 작동
뭐가 찍히는 지 콘솔로 확인 후
수정되는 값이 제대로 적용되어 콘솔에 뜨는지 확인
- ajax 통신 - jsp11.jsp ( jsp12.jsp 에 수정된 데이터 send)
여백을 없애줘야 함, jsp12.jsp 자체가 java 코드 이기 때문에 공백이 생기면 오류 발생
- ajax 통신 시 send로 name 값 여러개 보내기 (data 라는 변수에 한번에 담아 send로 날리기 위함)
post 통신 시 "content=type"으로 " application/x-www-form-urlencoded " 를 꼭 써줘야 작동함
- jsp12.jsp (수정한 데이터 처리)
받아온 callback 데이터를 jsp11.jsp 의 html 이 받아서 alert 를 띄움
pageing 출력 파트
일반적으로 1페이지 당 게시물은 10개 씩 출력
게시물이 17개라면
1page => 10 개
2page => 7개
이런 식으로 출력 되어야함
● 출력되는 페이지 수 계산
- pageno 를 float 형으로 설정
최종 페이지 수(total_pg)는 int형이어야 하므로 int로 pageno 를 설정할 경우 소수점 이하 자릿수가 다 버려지기 때문에 그렇게 되면 데이터 손실이 발생한다. ex)22개의 데이터를 5개씩 출력할때 마지막 2개의 데이터가 보이지 않음
alldata는 int형이 고정되어있기 때문에 바꿀 수 있는 pageno를 float형으로 써줌으로써 소수점이하 숫자들을 보존, 그 값을 ceil 로 반올림 시켜 데이터가 손실 나지 않고 마지막 페이지에 잘 보이도록 함
● 페이지 번호 핸들링 문법
- 페이지 번호 값은 get으로 넘김 (post로 넘기는건 말도 안됨)
- sql에 limit 숫자를 적용하는 방법
limit 'N' , '한페이지 당 출력될 데이터 갯수'
'N' : (현재번호 - 1) * 한페이지당 출력하는 데이터 갯수
- sql 구문에 limit 사용해서 원하는 데이터 수 만큼 끊어줌
- 일련번호도 페이지 넘길때 마다 바뀌도록 함
일련번호 : 데이터 전체 갯수 - 한페이지 당 갯수