회원정보 DB 저장

This commit is contained in:
choibk 2025-12-04 14:46:10 +09:00
parent 1e71fdde48
commit d88faa6c6b
7 changed files with 123 additions and 36 deletions

View File

@ -28,4 +28,22 @@ class Member {
return $stmt->rowCount() ? true : false; return $stmt->rowCount() ? true : false;
} }
// 회원 정보 입력
public function input($marr) {
$sql = "INSERT INTO member(id, password, name, email, zipcode, addr1, addr2, photo, create_at, ip) VALUES (:id, :password, :name, :email, :zipcode, :addr1, :addr2, :photo, NOW(), :ip)";
$stmt = $this->conn->prepare($sql);
$stmt->bindParam(':id', $marr['id']);
$stmt->bindParam(':password', $marr['password']);
$stmt->bindParam(':name', $marr['name']);
$stmt->bindParam(':email', $marr['email']);
$stmt->bindParam(':zipcode', $marr['zipcode']);
$stmt->bindParam(':addr1', $marr['addr1']);
$stmt->bindParam(':addr2', $marr['addr2']);
$stmt->bindParam(':photo', $marr['photo']);
$stmt->bindParam(':ip', $_SERVER['REMOTE_ADDR']);
$stmt->execute();
}
} }

BIN
data/profile/test01.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

View File

@ -4,7 +4,7 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title> <title><?= $g_title ?></title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/css/bootstrap.min.css" rel="stylesheet" <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-sRIl4kxILFvY47J16cr9ZwB07vP4J8+LH7qKQnuqkuIAvNWLzeN8tE5YBujZqJLB" crossorigin="anonymous"> integrity="sha384-sRIl4kxILFvY47J16cr9ZwB07vP4J8+LH7qKQnuqkuIAvNWLzeN8tE5YBujZqJLB" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/js/bootstrap.bundle.min.js" <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/js/bootstrap.bundle.min.js"

View File

@ -100,26 +100,48 @@ document.addEventListener("DOMContentLoaded", () => {
return false return false
} }
// 비밀번호 입력 여부 // 비밀번호 입력 여부
if (f.f_pwd.value == '') { if (f.password.value == '') {
alert('비밀번호를 입력하세요.') alert('비밀번호를 입력하세요.')
f.f_pwd.focus() f.password.focus()
return false return false
} }
if (f.f_pwd2.value == '') { if (f.password2.value == '') {
alert('비밀번호 확인이 필요합니다.') alert('비밀번호 확인이 필요합니다.')
f.f_pwd2.focus() f.password2.focus()
return false return false
} }
// 비밀번호 일치 여부 // 비밀번호 일치 여부
if (f.f_pwd.value != f.f_pwd2.value) { if (f.password.value != f.password2.value) {
alert('비밀번호가 일치하지 않습니다.') alert('비밀번호가 일치하지 않습니다.')
//f.f_pwd.value = '' //f.password.value = ''
f.f_pwd2.value = '' f.password2.value = ''
f.f_pwd2.focus() f.password2.focus()
return false return false
} }
// 이름 등록 여부
if (f.name.value == '') {
alert('이름을 입력해 주세요.')
f.name.focus()
return false
}
// 이메일 등록 여부
if (f.email.value == '') {
alert('이메일을 입력해 주세요')
f.email.focus()
return false
}
// 이메일 중복 체크 여부
if(f.email_chk.value == 0) {
alert('이메일 중복확인이 필요합니다.')
return false
}
f.submit()
}) })
// 우편번호 찾기 // 우편번호 찾기

View File

@ -8,6 +8,7 @@ if (!isset($_POST['chk']) || $_POST['chk'] != '1') {
} }
$js_array = ['js/member_input.js']; $js_array = ['js/member_input.js'];
$g_title = '회원가입';
include 'header.php'; include 'header.php';
@ -24,6 +25,7 @@ include 'header.php';
<input type="hidden" name="mode" value="input"> <input type="hidden" name="mode" value="input">
<input type="hidden" name="id_chk" value="0"> <input type="hidden" name="id_chk" value="0">
<input type="hidden" name="email_chk" value="0"> <input type="hidden" name="email_chk" value="0">
<div class="d-flex gap-2 align-items-end"> <div class="d-flex gap-2 align-items-end">
<div class="flex-grow-1"> <div class="flex-grow-1">
<label for="f_id">아이디</label> <label for="f_id">아이디</label>
@ -34,16 +36,23 @@ include 'header.php';
<div class="d-flex mt-3 gap-2 justify-content-between"> <div class="d-flex mt-3 gap-2 justify-content-between">
<div class="w-50"> <div class="w-50">
<label for="f_pwd" class="form-label">비밀번호</label> <label for="password" class="form-label">비밀번호</label>
<input typ="password" name="f_pwd" class="form-control" id="f_pwd" placeholder="비밀번호를 입력하세요"> <input type="password" name="password" class="form-control" id="password" placeholder="비밀번호를 입력하세요">
</div> </div>
<div class="w-50"> <div class="w-50">
<label for="f_pwd2" class="form-label">비밀번호 확인</label> <label for="password2" class="form-label">비밀번호 확인</label>
<input typ="password" name="f_pwd2" class="form-control" id="f_pwd2" placeholder="비밀번호를 입력하세요"> <input type="password" name="password2" class="form-control" id="password2" placeholder="비밀번호를 입력하세요">
</div> </div>
</div> </div>
<div class="d-flex gap-2 align-items-end"> <div class="d-flex mt-3 gap-2 align-items-end">
<div class="w-50">
<label for="f_name">이름</label>
<input typ="text" name="name" class="form-control" id="f_name" placeholder="이름을 입력하세요">
</div>
</div>
<div class="d-flex mt-3 gap-2 align-items-end">
<div class="flex-grow-1"> <div class="flex-grow-1">
<label for="f_email">이메일</label> <label for="f_email">이메일</label>
<input typ="text" name="email" class="form-control" id="f_email" placeholder="이메일을 입력하세요"> <input typ="text" name="email" class="form-control" id="f_email" placeholder="이메일을 입력하세요">
@ -54,7 +63,7 @@ include 'header.php';
<div class="d-flex gap-2 mt-3 align-items-end"> <div class="d-flex gap-2 mt-3 align-items-end">
<div> <div>
<label for="f_zipcode">우편번호</label> <label for="f_zipcode">우편번호</label>
<input type="text" name="zipcode" id="f_zipcode" class="form-control" maxlength="5" minlength="5"> <input type="text" name="zipcode" id="f_zipcode" readonly class="form-control" maxlength="5" minlength="5">
</div> </div>
<button type="button" class="btn btn-secondary" id="btn_zipcode">우편번호 찾기</button> <button type="button" class="btn btn-secondary" id="btn_zipcode">우편번호 찾기</button>
</div> </div>
@ -62,11 +71,11 @@ include 'header.php';
<div class="d-flex mt-3 gap-2 justify-content-between"> <div class="d-flex mt-3 gap-2 justify-content-between">
<div class="w-50"> <div class="w-50">
<label for="f_addr1" class="form-label">주소</label> <label for="f_addr1" class="form-label">주소</label>
<input typ="text" class="form-control" id="f_addr1" placeholder="주소를 입력하세요"> <input typ="text" name="addr1" class="form-control" id="f_addr1" placeholder="주소를 입력하세요">
</div> </div>
<div class="w-50"> <div class="w-50">
<label for="f_addr2" class="form-label">상세주소</label> <label for="f_addr2" class="form-label">상세주소</label>
<input typ="text" class="form-control" id="f_addr2" placeholder="상세주소를 입력하세요"> <input typ="text" name="addr2" class="form-control" id="f_addr2" placeholder="상세주소를 입력하세요">
</div> </div>
</div> </div>

View File

@ -1,31 +1,68 @@
<?php <?php
// 맨 첫 줄들에 추가
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
include '../config/dbconfig.php'; //상대경로 include '../config/dbconfig.php'; //상대경로
include '../config/member.php'; include '../config/member.php';
$mem = new Member($db); $mem = new Member($db);
$id = (isset($_POST['id']) && $_POST['id'] != '') ? $_POST['id'] : ''; $id = (isset($_POST['id']) && $_POST['id'] != '') ? $_POST['id'] : '';
$email = (isset($_POST['email']) && $_POST['email'] != '') ? $_POST['email'] : ''; $password = (isset($_POST['password']) && $_POST['password'] != '') ? $_POST['password'] : '';
$email = (isset($_POST['email']) && $_POST['email'] != '') ? $_POST['email'] : '';
$name = (isset($_POST['name']) && $_POST['name'] != '') ? $_POST['name'] : '';
$zipcode = (isset($_POST['zipcode']) && $_POST['zipcode'] != '') ? $_POST['zipcode'] : '';
$addr1 = (isset($_POST['addr1']) && $_POST['addr1'] != '') ? $_POST['addr1'] : '';
$addr2 = (isset($_POST['addr2']) && $_POST['addr2'] != '') ? $_POST['addr2'] : '';
$mode = (isset($_POST['mode']) && $_POST['mode'] != '') ? $_POST['mode'] : '';
if($_POST['mode'] == 'id_chk') { // 아이디 중복 체크
if($id == '') { if ($mode == 'id_chk') {
die(json_encode(['result' => 'empty_id'])); if ($id == '') {
die(json_encode(['result' => 'empty_id']));
} }
if($mem->id_exists($id)) { if ($mem->id_exists($id)) {
die(json_encode(['result' => 'fail'])); die(json_encode(['result' => 'fail']));
}else { } else {
die(json_encode(['result' => 'success'])); die(json_encode(['result' => 'success']));
} }
} // 이메일 중복 체크
} else if ($mode == 'email_chk') {
if($_POST['mode'] == 'email_chk') { if ($email == '') {
if($email == '') { die(json_encode(['result' => 'empty_email']));
die(json_encode(['result' => 'empty_email']));
} }
if($mem->email_exists($email)) { if ($mem->email_exists($email)) {
die(json_encode(['result' => 'fail'])); die(json_encode(['result' => 'fail']));
}else { } else {
die(json_encode(['result' => 'success'])); die(json_encode(['result' => 'success']));
} }
//
} else if ($mode == 'input') {
// 비밀번호 해시 처리
$hash = password_hash($password, PASSWORD_DEFAULT);
// 프로필 이미지 처리
$tmparr = explode('.', $_FILES['photo']['name']);
$ext = end($tmparr);
$photo = $id .'.'. $ext;
copy($_FILES['photo']['tmp_name'], "../data/profile/". $photo);
// 배열 생성
$arr = [
'id' => $id,
'password' => $hash,
'name' => $name,
'email' => $email,
'zipcode' => $zipcode,
'addr1' => $addr1,
'addr2' => $addr2,
'photo' => $photo
];
// 입력 메서드 실행
$mem->input($arr);
} }

View File

@ -1,6 +1,7 @@
<?php <?php
$js_array = [ 'js/member.js']; $js_array = [ 'js/member.js'];
$g_title = '약관';
include 'header.php'; include 'header.php';