'empty_id'])); } if ($mem->id_exists($id)) { die(json_encode(['result' => 'fail'])); } else { die(json_encode(['result' => 'success'])); } // ====================== // 2. 이메일 중복 체크 (AJAX) // ====================== } else if ($mode === 'email_chk') { if ($email === '') { die(json_encode(['result' => 'empty_email'])); } // 이메일 형식 체크 if ($mem->email_format_check($email) === false) { die(json_encode(['result' => 'email_format_wrong'])); } // 이메일 중복 체크 if ($mem->email_exists($email)) { die(json_encode(['result' => 'fail'])); } else { die(json_encode(['result' => 'success'])); } // ====================== // 3. 실제 회원 가입 처리 // ====================== } else if ($mode === 'input') { // 1) 필수값 서버 검증 (JS만 믿지 않기) if ($id === '' || $password === '' || $email === '') { redirect_with_error('아이디, 비밀번호, 이메일은 필수 입력 항목입니다.'); } // 2) 비밀번호 규칙 서버 검증 if (!password_check($password)) { redirect_with_error('비밀번호는 8자 이상이며, 대문자/소문자/숫자/특수문자를 모두 포함해야 합니다.'); } // 3) 선택 항목 기본값 처리 (미입력 시 빈 문자열) $name = $name ?? ''; $zipcode = $zipcode ?? ''; $addr1 = $addr1 ?? ''; $addr2 = $addr2 ?? ''; // 4) 비밀번호 해시 처리 $hash = password_hash($password, PASSWORD_DEFAULT); // 5) 프로필 이미지 처리 (선택 항목) $photo = ''; // 기본값: 빈 문자열 또는 'default.jpg' 등으로 변경 가능 if ( isset($_FILES['photo']) && $_FILES['photo']['error'] === UPLOAD_ERR_OK && is_uploaded_file($_FILES['photo']['tmp_name']) ) { $tmparr = explode('.', $_FILES['photo']['name']); $ext = strtolower(end($tmparr)); // 확장자 소문자로 정리 // 허용 확장자 $allow_ext = ['jpg', 'jpeg', 'png', 'gif']; if (!in_array($ext, $allow_ext)) { redirect_with_error('이미지 파일(jpg, jpeg, png, gif)만 업로드 가능합니다.'); } // 저장 파일명: 아이디.확장자 $photo = $id . '.' . $ext; // 저장 경로 $target_dir = "../data/profile/"; $target_path = $target_dir . $photo; // 디렉터리가 없으면 생성 if (!is_dir($target_dir)) { mkdir($target_dir, 0777, true); } // 파일 복사 if (!copy($_FILES['photo']['tmp_name'], $target_path)) { // 복사 실패 시 기본값 유지 $photo = ''; } } // 6) DB insert에 넘길 배열 생성 $arr = [ 'id' => $id, 'password' => $hash, 'name' => $name, 'email' => $email, 'zipcode' => $zipcode, 'addr1' => $addr1, 'addr2' => $addr2, 'photo' => $photo ]; // 7) 회원 정보 저장 $mem->input($arr); // 8) 가입 성공 시, 이전 입력/에러 세션 정리 unset($_SESSION['join_old'], $_SESSION['join_error']); // 9) 회원가입 완료 후 알림 + 홈(index.php) 이동 echo ""; exit; } // 기타 잘못된 접근에 대한 처리 (옵션) // else { // redirect_with_error('잘못된 접근입니다.'); // }