본문 바로가기
Develop/PHP

PHP 간단한 회원가입 기능 개발 (3)

by J0DEV 2021. 8. 11.
반응형

현재까지 한 작업을 정리하면

 

회원가입 입력 페이지를 만들었고 php에서 db와 연동하는 db_init.php파일을 제작했습니다.

 

이제 post로 넘겨온 데이터를 검증한 후, db_init.php를 사용하여 db에 올리는 작업을 해보겠습니다.

 

 

db폴더안에 join_chk.php 파일을 만들어줍니다.

 

php에서 post형식의 데이터를 받을때는

 

$_POST['넘겨오는 데이터의 name']입니다.

 

각각의 데이터를 받아오면

 

아래와 같습니다.

<?php
$userid = $_POST['userid'];
$userpw = $_POST['userpw'];
$userpw_chk = $_POST['userpw_chk'];
$user_email = $_POST['user_email'];
$usernk = $_POST['usernk'];
?>

 

이렇게 데이터를 받아왔으면 검증하는 작업이 필요합니다.

 

각 값들이 존재해야하며, 패스워드와 패스워드확인이 일치해야하고 이메일 형식이여야합니다.

 

그리고 아이디 및 닉네임의 중복과 각각의 데이터의 길이 등을 검증한 후,

 

모든 조건을 만족하면 데이터베이스에 올려주어야합니다.

 

일단 검증하는 코드를 작성해보겠습니다.

 

<?php
include "./db_init.php";
$userid = $_POST['userid'];
$userpw = $_POST['userpw'];
$userpw_chk = $_POST['userpw_chk'];
$user_email = $_POST['user_email'];
$usernk = $_POST['usernk'];


$stmt_id = $dbh->prepare('select * from member where userid=:userid');
$stmt_id->bindParam(':userid', $userid);
$stmt_id->execute();
$row_id = $stmt_id->fetch(PDO::FETCH_ASSOC);
$stmt_nk = $dbh->prepare('select * from member where usernk=:usernk');
$stmt_nk->bindParam(':usernk', $usernk);
$stmt_nk->execute();
$row_nk = $stmt_nk->fetch(PDO::FETCH_ASSOC);


function valid_email($address){
	if (preg_match("/^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$/i", $address)) {
	return true;
	} else{
		return false;
	}
}

if ($userid == null){
	echo "아이디를 입력해 주십시오.";
	exit();
} elseif (strlen($userid) < 5 || strlen($userid) > 21){
	echo "아이디의 길이는 6글자 이상, 20글자 이하로 입력해주십시오.";
	exit();
} elseif ($row_id>0){
	echo "중복된 아이디입니다. 다른 아이디를 사용해 주십시오.";
	exit();
} elseif ($userpw == null){
	echo "비밀번호를 입력해 주십시오.";
	exit();
} elseif (strlen($userpw) < 5 || strlen($userpw) > 21){
	echo "비밀번호는 6글자 이상, 20글자 이하로 입력해 주십시오.";
	exit();
} elseif ($userpw != $userpw_chk){
	echo "비밀번호가 일치하지 않습니다.";
	exit();
} elseif ($user_email == null){
	echo "이메일을 입력해주십시오.";
	exit();
} elseif (strlen($user_email) > 31){
	echo "이메일은 6글자 이상 30글자 이하로 입력해주십시오.";
	exit();
} elseif (!valid_email($user_email)){
	echo "올바른 이메일 형식을 사용해주십시오.";
	exit();
} elseif ($usernk == null){
	echo "닉네임을 입력해주십시오.";
	exit();
} elseif (strlen($usernk) < 5 || strlen($usernk) > 21){
	echo "닉네임은 6글자 이상 20글자 이하로 입력해주십시오.";
	exit();
} elseif ($row_nk > 0){
	echo "중복된 닉네임입니다. 다른 닉네임을 사용해 주십시오.";
	exit();
} else {
	echo $userid;
	echo $userpw;
	echo $user_email;
	echo $usernk;
}
?>

 

 

입력받은 아이디와 닉네임의 중복체크를 위한 query를 날려주고 결과값을 확인합니다.

 

그리고 이메일의 형식을 확인하기 위해, 정규식 함수를 하나 만들어 주고난 후,

 

 

모든 입력값에대한 검증을 합니다.

 

이렇게 검증이 다 되면, 데이터 베이스에 넣어줍니다.

 

 

이때, 비밀번호는 sha512로 해쉬화 해줍니다.

 

왜냐하면 관리자가 사용자의 계정을 악용할수도 있기 때문입니다.

 

<?php
include "./db_init.php";
$userid = $_POST['userid'];
$userpw = $_POST['userpw'];
$userpw_chk = $_POST['userpw_chk'];
$user_email = $_POST['user_email'];
$usernk = $_POST['usernk'];


$stmt_id = $dbh->prepare('select * from member where userid=:userid');
$stmt_id->bindParam(':userid', $userid);
$stmt_id->execute();
$row_id = $stmt_id->fetch(PDO::FETCH_ASSOC);
$stmt_nk = $dbh->prepare('select * from member where usernk=:usernk');
$stmt_nk->bindParam(':usernk', $usernk);
$stmt_nk->execute();
$row_nk = $stmt_nk->fetch(PDO::FETCH_ASSOC);


function valid_email($address){
	if (preg_match("/^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$/i", $address)) {
	return true;
	} else{
		return false;
	}
}

if ($userid == null){
	echo "아이디를 입력해 주십시오.";
	exit();
} elseif (strlen($userid) < 5 || strlen($userid) > 21){
	echo "아이디의 길이는 6글자 이상, 20글자 이하로 입력해주십시오.";
	exit();
} elseif ($row_id>0){
	echo "중복된 아이디입니다. 다른 아이디를 사용해 주십시오.";
	exit();
} elseif ($userpw == null){
	echo "비밀번호를 입력해 주십시오.";
	exit();
} elseif (strlen($userpw) < 5 || strlen($userpw) > 21){
	echo "비밀번호는 6글자 이상, 20글자 이하로 입력해 주십시오.";
	exit();
} elseif ($userpw != $userpw_chk){
	echo "비밀번호가 일치하지 않습니다.";
	exit();
} elseif ($user_email == null){
	echo "이메일을 입력해주십시오.";
	exit();
} elseif (strlen($user_email) > 31){
	echo "이메일은 6글자 이상 30글자 이하로 입력해주십시오.";
	exit();
} elseif (!valid_email($user_email)){
	echo "올바른 이메일 형식을 사용해주십시오.";
	exit();
} elseif ($usernk == null){
	echo "닉네임을 입력해주십시오.";
	exit();
} elseif (strlen($usernk) < 5 || strlen($usernk) > 21){
	echo "닉네임은 6글자 이상 20글자 이하로 입력해주십시오.";
	exit();
} elseif ($row_nk > 0){
	echo "중복된 닉네임입니다. 다른 닉네임을 사용해 주십시오.";
	exit();
} else {

	$hash = hash('sha512', $userpw);
	$stmt = $dbh->prepare("insert into member (userid, userpw, user_email, usernk) values (:userid, :userpw, :user_email, :usernk)");
	$stmt->bindParam(':userid',$userid);
	$stmt->bindParam(':userpw',$hash);
	$stmt->bindParam(':user_email',$user_email);
	$stmt->bindParam(':usernk',$usernk);
	$stmt->execute();
	echo $userid;
	echo $userpw;
	echo $user_email;
	echo $usernk;
}

 


?>

 

DB안에 내용을 확인하면

 

 

제대로 회원가입 내용이 들어가 있는 것을 확인할 수 있습니다.

 

여기까지 php로 회원가입 서비스를 만들어봤습니다.

 

반응형

'Develop > PHP' 카테고리의 다른 글

PHP 간단한 회원가입 기능 개발 (2)  (0) 2021.08.11
PHP 간단한 회원가입 기능 개발 (1)  (0) 2021.08.11
PHP PDO MYSQL 연동  (0) 2021.08.11