1. 사용할 db table 생성 - member, insert
2. 아이디 중복 체크 페이지 작성 html, js ajax
3. 아이디 중복 처리 php 모듈 작성
db에 member 테이블 생성
쿼리문
use kingchobo;
CREATE TABLE member (
idx integer unsigned not null AUTO_INCREMENT,
user_id varchar(50) default '',
rdate datetime,
primary key (idx)
);
더미데이터 주입
쿼리
insert into member (user_id, rdate) values
('kingchobo', now());
idcheck.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>아이디 중복 체크</title>
</head>
<body>
<form action="">
<input type="text" name="user_id" id="user_id" placeholder="아이디">
<input type="button" value="중복확인" id="ajax_btn">
<p>
<span id="msg">아이디는 대소문자 구분없이 12자 이내로 입력바랍니다.</span>
</p>
아이디 체크 폼 만들기
db.php
<?php
$servername = 'localhost';
$username = 'root';
$password = '본인 sql비밀번호';
$dbname = "DB 스키마 이름";
try{
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (Exception $e) {
echo $e->getMessage();
exit;
}
check_id.php
<?php
// db연결
require_once("db.php");
$user_id = $_GET["id"];
// user_id 테이블에 넘어온 $user_id가 일치하는 행의 개수를 반환
$sql = "SELECT COUNT(*) cnt FROM member WHERE user_id='". $user_id . "'";
// $conn = 데이터베이스에 연결된 PDO 객체, prepare()메서드를 사용하여 $sql쿼리를 실행시킬 준비를 함
$stmt = $conn->prepare($sql);
// execute()메서드를 사용하여 쿼리를 실행시킴, 쿼리가 실행된 결과는 $stmt를 이용해 읽을 수 있음
$stmt->execute();
// setFetchMode() 메서드를 사용하여 '결과 집합에서 가져온 행의 반환 형식 설정'
// PDO::FETCH_ASSOC = '연관 배열 형식으로 행을 반환'하도록 설정
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
// fetch() 메서드는 결과 집합에서 한 번에 하나의 행을 가져오며 호출될 때마다 다음 행을 반환
$row = $stmt->fetch();
// result에 값을 담을건데 cnt가 있으면 exist 없으면 not_exist를 담음
// cnt가 1이면 아이디 중복이니 true가 되어 exist, 0이면 false가 되어 not_exist
$arr = array("result" => $row["cnt"] ? "exist" : "not_exist");
// json형식으로 변환 및 종료
die(json_encode($arr));
idcheck.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>아이디 중복 체크</title>
</head>
<body>
<form action="">
<input type="text" name="user_id" id="user_id" placeholder="아이디">
<input type="button" value="중복확인" id="ajax_btn">
<p>
<span id="msg">아이디는 대소문자 구분없이 12자 이내로 입력바랍니다.</span>
</p>
</form>
<script>
const ajax_btn = document.querySelector("#ajax_btn");
ajax_btn.addEventListener("click", () => {
const user_id = document.querySelector("#user_id");
const span_msg = document.querySelector("#msg");
const xhr = new XMLHttpRequest();
xhr.open("GET", "./check_id.php?id=" + user_id.value, true);
// 요청 전송
xhr.send();
// 통신 후 작업
xhr.onload = () => {
// 통신 성공
if (xhr.status == 200) {
console.log ('통신성공');
const obj = JSON.parse(xhr.response); // JSON.parse() = JSON 형식의 문자열을 JavaScript 객체로 변환하는 역할
if(obj.result == "exist") {
span_msg.textContent = "이미 사용중인 아이디 입니다.";
user_id.value = ""; // 입력된 텍스트를 지워줌
user_id.focus();
} else {
span_msg.textContent = "사용 가능한 아이디 입니다.";
}
} else {
console.log (xhr.status);
}
}
});
</script>
</body>
</html>
스크립트 작성