상세 컨텐츠

본문 제목

PHP+Ajax+MySQLI(PDO) 아이디 중복체크

php

by 개발일지작성 2024. 3. 26. 14:49

본문

728x90

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>
</body>
</html>

아이디 체크 폼 만들기

 

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>

스크립트 작성

'php' 카테고리의 다른 글

PHP+Ajax 투표 프로그램  (0) 2024.03.26
PHP+Ajax 이미지 파일 업로드  (0) 2024.03.26
PHP cURL 이용하여 JSON 데이터 가져와 활용  (0) 2024.03.26
PHP curl  (0) 2024.03.26
PHP short_open_tag  (0) 2024.03.26

관련글 더보기