// 아이디 중복 체크
const btn_id_chk = document.querySelector("#btn_id_chk")
btn_id_chk.addEventListener("click", () => {
const f_id = document.querySelector("#f_id")
if (f_id.value == "") {
alert("아이디를 입력해 주세요.")
f_id.focus()
return false
}
출 처 https://developer.mozilla.org/ko/docs/Glossary/AJAX
AJAX는 전체 페이지가 다시 로드되지 않고 HTML 페이지 일부 DOM만 업데이트하는 좀 더 복잡한 웹페이지를 만들 수 있게 해줍니다. 또한 AJAX를 사용하면 웹페이지 일부가 리로드 되는 동안에도 코드가 계속 실행되어, 비동기식으로 작업할 수 있습니다.
출 처 https://developer.mozilla.org/ko/docs/Web/API/FormData
FormData 인터페이스는 form 필드와 그 값을 나타내는 일련의 key/value 쌍을 쉽게 생성할 수 있는 방법을 제공합니다. 또한 XMLHttpRequest.send() 메서드를 사용하여 쉽게 전송할 수 있습니다.
출 처 https://developer.mozilla.org/ko/docs/Web/API/XMLHttpRequest
XMLHttpRequest (XHR) 객체는 서버와 상호작용할 때 사용합니다. XHR을 사용하면 페이지의 새로고침 없이도 URL에서 데이터를 가져올 수 있습니다. XMLHttpRequest는 AJAX 프로그래밍에 많이 사용됩니다.
// Ajax
const f1 = new FormData()
f1.append("id", f_id.value)
f1.append("mode", "id_chk")
const xhr = new XMLHttpRequest()
xhr.open("POST", "./pg/member_process.php", "true")
xhr.send(f1)
xhr.onload = () => {
if (xhr.status == 200) {
const data = JSON.parse(xhr.responseText)
if (data.result == "fail") {
alert("중복된 아이디 입니다.")
f_id.value = ""
f_id.focus()
} else {
alert("사용 가능한 아이디 입니다.")
id_cnt.value = 1
}
}
}
})
<?php
include "../inc/dbconfig.php";
include "../inc/member.php";
$mem = new Member($db);
$id = $_POST["id"];
if ($_POST["mode"] == "id_chk") {
if ($mem->id_exists($id)) {
// echo "아이디가 중복 되었습니다.";
$arr = ["result" => "fail"];
$json = json_encode($arr); // 배열을 json 타입으로 변환 {"result" : "fail"}
echo $json;
exit;
} else {
// echo "사용 가능한 아이디 입니다.";
$arr = ["result" => "success"];
$json = json_encode($arr); // 배열을 json 타입으로 변환 {"result" : "fail"}
echo $json;
exit;
}
}
// 가입버튼 클릭 시
const btn_submit = document.querySelector("#btn_submit")
btn_submit.addEventListener("click", () => {
if (f_id.value == "") {
alert("아이디를 입력해 주세요.")
f_id.focus()
return false
}
// 아이디 중복체크 여부 확인
const id_cnt = document.querySelector("#id_cnt")
if (id_cnt.value == 0) {
alert("아이디 중복 체크를 해주세요.")
return false
}
// 비밀번호 확인
const f_pw = document.querySelector("#f_pw")
if (f_pw.value == "") {
alert("비밀번호를 입력해 주세요.")
f_pw.focus()
return false
}
// 비밀번호 재확인
const f_pw2 = document.querySelector("#f_pw2")
if (f_pw2.value == "") {
alert("2차 비밀번호를 입력해 주세요.")
f_pw2.focus()
return false
}
// 비밀번호 일치 확인
if (f_pw.value != f_pw2.value) {
alert("비밀번호가 일치하지 않습니다.")
f_pw.value = ""
f_pw2.value = ""
f_pw.focus()
return false
}
// 이메일 중복체크 여부 확인
const email_cnt = document.querySelector("#email_cnt")
if (email_cnt.value == 0) {
alert("이메일 중복 체크를 해주세요.")
return false
}
// 이메일 중복 체크
const btn_email_chk = document.querySelector("#btn_email_chk")
btn_email_chk.addEventListener("click", () => {
const f_email = document.querySelector("#f_email")
if (f_email.value == "") {
alert("이메일을 입력해 주세요.")
f_email.focus()
return false
}
// Ajax
const f1 = new FormData()
f1.append("email", f_email.value)
f1.append("mode", "email_chk")
const xhr = new XMLHttpRequest()
xhr.open("POST", "./pg/member_process.php", "true")
xhr.send(f1)
xhr.onload = () => {
if (xhr.status == 200) {
const data = JSON.parse(xhr.responseText)
if (data.result == "Email_fail") {
alert("중복된 이메일 입니다.")
f_email.value = ""
f_email.focus()
} else {
alert("사용 가능한 이메일 입니다.")
email_cnt.value = 1
}
}
}
})
if ($_POST["mode"] == "email_chk") {
if ($mem->email_exists($email)) {
// echo "이메일이 중복 되었습니다.";
$arr = ["result" => "Email_fail"];
$json = json_encode($arr); // 배열을 json 타입으로 변환 {"result" : "fail"}
echo $json;
exit;
} else {
// echo "사용 가능한 이메일 입니다.";
$arr = ["result" => "Email_success"];
$json = json_encode($arr); // 배열을 json 타입으로 변환 {"result" : "fail"}
echo $json;
exit;
}
}
const f_email = document.querySelector("#f_email")
if (f_email.value == "") {
alert("이메일을 입력해 주세요.")
f_email.focus()
return false
}
이번 부분에서 새로운 내용들이 있어서 익숙해지는 데 시간이 걸렸네요.
다음 시간에는 우편번호를 외부에서 이미 만들어진 걸 가져와서 사용해 볼 겁니다.
그리고 이미지 업로드 부분도 같이 해보겠습니다.
긴 글 봐주셔서 감사합니다.