오늘 할일
AQueryTool 에서 관계도 만드는 법 알아보기
기존 홈페이지에 댓글 달기
DBeaver 설치해서 사용해보기
홈페이지 가입할 때 아이디 중복 검사를 눌러야만 가입하기 버튼이 활성화되게 하기
if (result == 1) {
alert("이미 가입되어 있어요.");
$("#joinBtn").attr("disabled", "disabled"); // 가입 버튼을 비활성화 시키기
$("#id").focus();
} else {
alert("가입 가능해요.");
$("#joinBtn").removeAttr("disabled") // 가입 버튼의 비활성화를 제거 = 활성화
$("#name").focus();
ID 에 영어, 숫자만 작성되게 하기, 특수문자, 한글 막기
const regExp = /[\{\}\[\]\/?.,;:|\)*~`!^\-_+<>@\#$%&\\\=\(\'\"\sㄱ-ㅎㅏ-ㅣ가-힣]/g; //한글+공백
// alert(regExp.test(id)); // 한글,공백 포함여부 검사하는 정규식
if (id.length < 3 || regExp.test(id)) {
input 의 값이 변경되면 창 띄우기
// on - 값의 변화를 감지하는 함수
$("#id").on("change keyup paste", function() {
// alert("아이디 입력 값이 변경됨");
$(".id-alert").show();
$(".id-alert").html("<p class='alert'>당신이 입력한 ID 는 " + $('#id').val() + "</p>");
});
이것 저것 해보는 중.. ID 의 중복, 특수문자, 한글 등 사용 시 가입 못하게 막기
코드가 완전.. 복잡
<script type="text/javascript">
// $(document).ready(function() {});
// 대신 사용할 수 있는 축약형
// 글로벌 변수 만들기
let idCheckBool = false;
$(function() {
$(".id-alert, .name-alert, .pw-alert").hide();
// $(".name-alert").hide();
// $(".pw-alert").hide();
// onchange() 함수
// $("#id").change(function (){
// $("#joinBtn").attr("disabled", "disabled"); // 비활성화 시키기
// });
// on - 값의 변화를 감지하는 함수
$("#id").on("change keyup paste", function() {
// alert("아이디 입력 값이 변경됨");
$(".id-alert").show();
$(".id-alert").html("<p class='alert'>당신이 입력한 ID 는 " + $('#id').val() + "</p>");
if ($("#id").val().length > 2) {
idCheck();
}
});
})
function check() {
// alert("제이쿼리가 동작합니다.");
let id = $("#id").val();
// Not a Number
// alert(id + " : " + id.length + " / 숫자 검사 : " + isNaN(id));
if (id.length < 3 || id == "") {
// alert("아이디는 3글자 이상이여야 함");
$(".id-alert").show();
$("#id").focus();
return false;
} else {
$(".id-alert").hide();
}
if (!idCheck) {
alert("ID 검사를 먼저 실행해주세요.")
return false;
}
let name = $("#name").val();
if (name.length < 3) {
// alert("이름은 3글자 이상이여야 함");
$("#name").focus();
$(".name-alert").show();
return false;
} else {
$(".name-alert").hide();
}
let pw1 = $("#pw1").val();
let pw2 = $("#pw2").val();
if (pw1.length < 8) {
// alert("비밀번호는 8자리 이상만 받습니다.");
$("#pw1").focus();
$(".pw-alert").show();
return false;
}
if (pw2.length < 8) {
// alert("비밀번호는 8자리 이상만 받습니다.");
$("#pw2").focus();
$(".pw-alert").show();
return false;
}
if (pw1 != pw2) {
// alert("비밀번호는 서로 같아야 합니다.");
$("#pw1").val(""); // val 안의 값을 넣지만, 빈칸이면 값을 지우는 효과를 가짐
$("#pw1").focus();
$(".pw-alert").show();
return false;
}
$(".pw-alert").hide();
}
function idCheck() {
// alert("ID 검사를 누름");
let id = $("#id").val();
const regExp = /[\{\}\[\]\/?.,;:|\)*~`!^\-_+<>@\#$%&\\\=\(\'\"\sㄱ-ㅎㅏ-ㅣ가-힣]/g; //한글+공백
// alert(regExp.test(id)); // 한글,공백 포함여부 검사하는 정규식
if (id.length < 3 || regExp.test(id)) {
$(".id-alert").show();
$("#joinBtn").attr("disabled", "disabled"); // 비활성화 시키기
} else {
// $(".id-alert").hide();
// alert(id);
$.ajax({
url : './idCheck', // 어디로 보낼 지 정함
type : 'post', // 보내는 타입 설정
dataType : 'text', // 보내는 데이터의 타입 설정
data : {
'id' : id
}, // 앞이 보낼 이름
success : function(result) {
// alert("통신성공~");
if (result == 1) {
// alert("이미 가입되어 있어요.");
// $(".id-alert").html("<p class='alert'>가입 불가능한 ID 입니다.<p>");
$(".id-alert").append("<p class='alert'>이미 가입되어 있음</p>");
$(".id-alert .alert").css("color", "tomato");
idCheckBool = false;
$("#joinBtn").attr("disabled", "disabled"); // 비활성화 시키기
// $("#id").focus();
} else {
// alert("가입 가능해요.");
// $(".id-alert").html("<p>가입 가능한 ID 입니다.<p>");
$(".id-alert").append("<p class='alert'>가입 가능</p>");
$(".id-alert .alert").css("color", "green");
idCheckBool = true;
$("#joinBtn").removeAttr("disabled") // 비활성화를 제거 = 활성화
// $("#name").focus();
}
},
error : function(request, status, error) {
alert("문제가발생했어요~");
}
});
}
return false;
}
</script>
게시글에 접속한 사람을 확인하여 중복 count 하지 않기
Board 에서 count 열을 삭제
이후 다시 접속한 사람의 기록이 남는 테이블을 하나 생성
방문 시 방문한 시간, 방문한 글 번호, 방문한 회원 번호 저장 - DAO 작성
public void countUp(int no, String mid) {
Connection conn = dbConn.getConn();
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = "SELECT COUNT(*) as count FROM visitcount WHERE board_no=? AND mno=(SELECT mno FROM member WHERE mid=?)";
int result = 0;
try {
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, no);
pstmt.setString(2, mid);
rs = pstmt.executeQuery();
if (rs.next()) {
result = rs.getInt("count");
if (result == 0) {
realCountUp(no, mid);
}
}
} catch (SQLException e) {
System.out.println("BoardDAO - countUp 에러");
// e.printStackTrace();
} finally {
close(conn, pstmt, rs);
}
}
글의 방문자 수를 count 하여 해당 내용을 출력
댓글 코멘트 만들기
댓글에도 글 번호, 회원번호, 댓글 내용, 댓글 작성일, 좋아요 수 테이블 생성
Board 게시판에도 댓글이 1개 이상 이면 제목 옆에 댓글 수 출력되게 변경
- > JSTL 사용
<td class="title"><a href="./detail?no=${row.no}">
${row.title } <c:if test="${row.comment gt 0 }">
<span>${row.comment }</span></c:if></a></td>
글 조회시 외래키로 글 번호와 회원정보 등록하여 글 삭제가 불가 - > 현재는 불가
그리하여 글 삭제 시 실제 글이 삭제되는 것이 아닌 노출만 안되게 설정
DB 에 enum 으로 글의 노출 여부 설정
boardview 에도 board_del 이 1 인 글만 조회되게 설정 추가
WHERE board_del = 1 조건 넣기
글 삭제 DAO 도 수정
다 똑같지만 SQL 문만 UPDATE 로 수정
String sql = "UPDATE board SET board_del='0' " +
"WHERE board_no=? AND mno=(SELECT mno FROM c23c_26.member WHERE mid=?)";
겉으로는 글 삭제가 된 것으로 보이지만 실제로는 글 삭제가 아닌 노출만 안되게 설정됨
'HTML' 카테고리의 다른 글
240122 HTML 홈페이지 (0) | 2024.01.22 |
---|---|
240120 HTML 공부 (0) | 2024.01.20 |
240118 홈페이지 만들기 (0) | 2024.01.18 |
240116 HTML, Servlet 홈페이지 (0) | 2024.01.16 |
240115 홈페이지 만들기 (0) | 2024.01.15 |