반응형
현재까지 한 작업을 정리하면
회원가입 입력 페이지를 만들었고 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 |