2022. 10. 22. 01:54ㆍ무료강좌&튜토리얼/PHP
[PHP] 회원가입, 로그인 기능 만들기 (5/8) - 회원가입 정보 저장하기
앞에서 생성한 회원가입 폼에 입력된 데이터를 member 테이블에 저장하는 기능을 구현해보자.
[예제: 174_signUpSave.php ]
<?php
include $_SERVER['DOCUMENT_ROOT'].'/php/common/171_session.php';
include $_SERVER['DOCUMENT_ROOT'].'/php/cssControlPanel/163_connection.php';
$email = $_POST['userEmail'];
$nickName = $_POST['userNickName'];
$pw = $_POST['userPw'];
$birthYear = (int) $_POST['birthYear'];
$birthMonth = $_POST['birthMonth'];
$birthDay = $_POST['birthDay'];
function goSignUpPage($alert) {
echo $alert.'<br>';
echo "<a href='./173_signUpForm.php'>회원가입 폼으로 이동</a>";
return;
}
// 유효성 검사
// 이메일 검사
if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
goSignUpPage('올바른 이메일이 아닙니다.');
exit;
}
// 한글로 구성되어 있는지 정규식 검사
$nickNameRegPattern = '/^[가-힣]{1,}$/';
if (!preg_match($nickNameRegPattern, $nickName, $matches)) {
goSignUpPage('닉네임은 한글로만 입력해 주세요.');
exit;
}
// 비밀번호 검사
if ($pw == null || $pw == '') {
goSignUpPage('비밀번호를 입력해 주세요');
exit;
}
$pw = sha1('php200'.$pw);
// 생년 검사
if($birthYear == 0) {
goSignUpPage('태어난 해를 정확히 입력해 주세요.');
exit;
}
// 태어난 월 검사
if($birthMonth == 0) {
goSignUpPage('태어난 달을 정확히 입력해 주세요.');
exit;
}
// 태어난 날 검사
if($birthDay == 0) {
goSignUpPage('태어난 일을 정확히 입력해 주세요.');
exit;
}
$birth = $birthYear.'-'.$birthMonth.'-'.$birthDay;
// 이메일 중복 검사
$isEmailCheck = false;
$sql = "SELECT email FROM member WHERE email = '{$email}'";
$result = $dbConnect->query($sql);
if($result) {
$count = $result->num_rows;
if($count == 0) {
$isEmailCheck = true;
} else {
echo "이미 존재하는 이메일 입니다.";
goSignUpPage();
exit;
}
} else {
echo "에러발생 : 관리자 문의 요망";
exit;
}
// 닉네임 중복 검사
$isNickNameCheck = false;
$sql = "SELECT nickName FROM member WHERE nickname = '{$nickName}'";
$result = $dbConnect->querr($sql);
if($result) {
$count = $result->num_rows;
if($count == 0) {
$isNickNameCheck = true;
} else {
goSignUpPage('이미 존재하는 닉네임 입니다.');
exit;
}
} else {
echo "에러발생 : 관리자 문의 요망.";
exit;
}
if($isEmailCheck == true && $isNickNameCheck == true) {
$regDate = time();
$sql = "INSERT INTO member(email, nickName, pw, birthday, regDate)";
$sql .= "VALUES('{$email}', '{$nickName}', '{$pw}', '{$birth}', {$regDate})";
$result = $dbConnect->query($sql);
if($result) {
$_SESSION['memberID'] = $dbConnect->insert_id;
$_SESSIOn['nick Name'] = $nickName;
Header("Location:../index.php");
} else {
goSignUpPage('회원가입 실패 - 관리자엑 문의');
exit;
}
} else {
goSignUpPage('이메일 또는 닉네임이 중복값입니다.');
exit;
}
?>
1. 회원가입에 성공하면 바로 세션을 생성하기 위해 171_session.php 파일을 include 한다.
2. 데이터베이스에 접속하므로 163_connection.php 파일을 include한다.
3. form 태그로 받은 데이터들을 각각의 변수에 대입한다.
4. 생년월일을 정수형으로 형 변환하여 숫자외에 다른 값이 들어오면 값을 0으로 변환하게 한다.
5. 전달받은 값이 적합하지 않은 값일 때 사용할 함수를 만든다.
파라미터로 알림 문구를 받아 출력하는 기능과 회원가입 페이지로 이동하는 링크 태그를 출력한다.
a 태그는 링크 태그이며 href 속성에 이동할 주소를 입력한다.
6. 이메일 주소가 유효성에 접합한지 검사하며 적합하지 않으면 goSignUpPage() 함수를 호출하고 페이지의 작동을 중지한다.7. 닉네임의 값을 정규식으로 확인하기 위한 패턴식이다. 한글로 구성되어 있는지 확인하는 패턴식이다.8. 닉네임의 값이 패턴식의 규칙에 맞지 않으면 goSignUpPage() 함수를 호출하고 페이지의 작동을 중지한다.9. 비밀번호가 공백인지 확인 후 이상이 없다면 sha1() 함수를 사용해 입력한 비밀번호를 암호화 처리한다.sha1() 함수는 문자열을 암호화하는 함수이며 입력한 비밀번호의 앞에 사용한 'php200'은 임의적으로 비밀번호에 값을 더하여 실제 입력한 값과 다르게 변경하여 sha1() 함수가 암호화 처리하게 한다.10. 생년월일의 값이 이상이 없는지 확인하며 이상이 있을 시 goSignUpPage() 함수를 실행한다.11. 생년월일 값이 이상이 없다면 yyyy-mm-dd 형태로 값을 생성 후 변수 birth에 대입한다.12. 입력한 이메일이 member 테이블에 존재하는지 검사하며 결과를 변수 isEmailCheck에 대입한다.사용할 수 없는 이메일이면 변수 isEmailCheck의 값은 false이며, 사용 가능한 값이면 true가 대입된다.13. 입력한 닉네임이 member 테이블에 존재하는지 검사하며 결과를 변수 isNickNameCheck에 대입한다.사용할 수 없는 닉네임이면 변수 isNickNameCheck의 값은 false이며, 사용 가능한 값이면 true가 대입된다.14. 이메일 중복 체크 정보를 담는 변수인 isEmailCheck과 닉네임 중복 체크 정보를 담는 변수 isNickNameChek의 값이 모두 true이면 member 테이블에 데이터를 입력한다.15. member 테이블에서 데이터 입력에 성공하면 $_SESSION['memberID']와 $_SESSION['nickName']을 생성한 후 메인페이지로 이동한다.109라인에 사용된 isert_id는 입력된 쿼리가 갖게된 primary_key의 값을 의미한다. 즉 memberID의 값이 $_SESSION['memberID']에 적용된다.
초보자를 위한 PHP 200제
김태영 지음 | 정보문화사
'무료강좌&튜토리얼 > PHP' 카테고리의 다른 글
| [PHP] 회원가입, 로그인 기능 만들기 (7/8) - 로그인 기능 만들기 (0) | 2022.10.24 |
|---|---|
| [PHP] 회원가입, 로그인 기능 만들기 (6/8) - 로그인 폼 만들기 (0) | 2022.10.22 |
| [PHP] 회원가입, 로그인 기능 만들기 (4/8) - 회원가입 폼 만들기 (0) | 2022.10.22 |
| [PHP] 회원가입, 로그인 기능 만들기 (3/8) - member 테이블 생성하기 (1) | 2022.10.21 |
| [PHP] 회원가입, 로그인 기능 만들기 (2/8) - session_start() 파일 만들기 (0) | 2022.10.21 |