회원정보를 DB에 저장해 보기.
이전 강좌에서 만든 회원가입 폼에 이어 입력한 값들을 디비에 저장하는 기능을 만들어 봅시다.
만드는 방법 또한 매우 간단합니다. 값들을 받아서 insert into 문을 실행하면 끝이죠.
그럼 한번 만들어 볼까요.
<?php include "../include/dbConnect.php"; $memberId = $_POST['memberId']; $memberName = $_POST['memberName']; $memberPw = $_POST['memberPw']; $memberPw2 = $_POST['memberPw2']; $memberNickName = $_POST['memberNickName']; $memberEmailAddress = $_POST['memberEmailAddress']; $memberBirthDay = $_POST['memberBirthDay']; //PHP에서 유효성 재확인 //아이디 중복검사. $sql = "SELECT * FROM member WHERE memberId = '{$memberId}'"; $res = $dbConnect->query($sql); if($res->num_rows >= 1){ echo '이미 존재하는 아이디가 있습니다.'; exit; } //비밀번호 일치하는지 확인 if($memberPw !== $memberPw2){ echo '비밀번호가 일치하지 않습니다.'; exit; }else{ //비밀번호를 암호화 처리. $memberPw = md5($memberPw); } //닉네임, 생일 그리고 이름이 빈값이 아닌지 if($memberNickName == '' || $memberBirthDay == '' || $memberName == ''){ echo '생일혹은 닉네임의 값이 없습니다.'; } //이메일 주소가 올바른지 $checkEmailAddress = filter_var($memberEmailAddress, FILTER_VALIDATE_EMAIL); if($checkEmailAddress != true){ echo "올바른 이메일 주소가 아닙니다."; exit; } //이제부터 넣기 시작 $sql = "INSERT INTO member VALUES('','{$memberId}','{$memberName}','{$memberNickName}','{$memberPw}','{$memberEmailAddress}','{$memberBirthDay}');"; if($dbConnect->query($sql)){ echo '회원가입 성공'; } ?>
소스를 설명해 볼껀데요.
일단 데이터 들을 받아 줍니다.
$memberId = $_POST['memberId']; $memberName = $_POST['memberName']; $memberPw = $_POST['memberPw']; $memberPw2 = $_POST['memberPw2']; $memberNickName = $_POST['memberNickName']; $memberEmailAddress = $_POST['memberEmailAddress']; $memberBirthDay = $_POST['memberBirthDay'];
우리는 이전에 javascript를 통해서 아이디가 중복된 값인지 패스워드는 일치하는지 등등 검사를 했었습니다.
하지만 여기 페이지에서는 그 기능을 다시 만들어 줘야 합니다. PHP로요.
이렇게 해야 하는 이유는 무엇일까요?
바로 자바스크립트는 클라이언트 사이드 언어 이기 때문입니다. 클라이언트 사이드 언어는 크롬 인스펙터등을 통해서 얼마든지 소스를 조작가능 합니다.
즉, 우리가 만든 기능들을 검사하지 않게 하고 바로 넘어 갈 수도 있다는 것이지요, 물론 웹을 아는 나쁜 사람들일 것입니다.
이러한 사람들이 하는 행위를 방지하기 위해서 PHP에서도 그 과정을 한번 더 거칩니다.
//PHP에서 유효성 재확인 //아이디 중복검사. $sql = "SELECT * FROM member WHERE memberId = '{$memberId}'"; $res = $dbConnect->query($sql); if($res->num_rows >= 1){ echo '이미 존재하는 아이디가 있습니다.'; exit; } //비밀번호 일치하는지 확인 if($memberPw !== $memberPw2){ echo '비밀번호가 일치하지 않습니다.'; exit; }else{ //비밀번호를 암호화 처리. $memberPw = md5($memberPw); } //닉네임, 생일 그리고 이름이 빈값이 아닌지 if($memberNickName == '' || $memberBirthDay == '' || $memberName == ''){ echo '생일혹은 닉네임의 값이 없습니다.'; exit; } //이메일 주소가 올바른지 $checkEmailAddress = filter_var($memberEmailAddress, FILTER_VALIDATE_EMAIL); if($checkEmailAddress != true){ echo "올바른 이메일 주소가 아닙니다."; exit; }
위의 소스에서와 같이 아이디 중복검사를 거치고 패스워드가 일치하는지를 검사하고 공백값이 있는지도 검사합니다.
저 위의 방법에서 걸린 사람들은 어차피 비정상적인 경로로 들어온 경우 이기 때문에 따로 어긋난 짓을 했을때의 행위는 만들어주지 않고 그냥 exit처리만 합니다.
저는 그렇지만 여러분들은 여러분이 원하는 방식으로 하면 됩니다. 비밀번호를 검사하고 비밀번호가 일치하면
$memberPw = md5($memberPw); 이렇게 md5라는 함수에 값을 넣는데요. 이러한 비밀번호가 암호화 처리가 됩니다.
여러분들이 웹 서비스를 만들때 고객분들의 비밀번호가 그대로 DB에 들어가면 안되겠죠? 만약 나쁜 누군가가 여러분이 만든 DB를 해킹한다면 암호화 되지 않은 비밀번호가
뚫린다면 정말 큰일이 납니다. 그렇게 하기 위해서 비밀번호는 개발자도, 회사 사장도, 비밀번호의 주인도 모르는 무언가로 변경되어 저장이 되어야 합니다. 무조건이요.
하지만 일부 쓰레기 같은 회사들은 암호화 하지 않고 저장하는 경우들도 많습니다. 그러니 조심 하세요.
그리고 위의 과정들을 모두 거치면 저장을 합니다.
//이제부터 넣기 시작 $sql = "INSERT INTO member VALUES('','{$memberId}','{$memberName}','{$memberNickName}','{$memberPw}','{$memberEmailAddress}','{$memberBirthDay}');"; if($dbConnect->query($sql)){ echo '회원가입 성공'; }
짜잔 이렇게 저장이 가능합니다.