Register Page : HTML에서 확인한 바와 같이 <form> tag의 버튼이 눌리게 되는 순간!
register.php가 동작하게 된다.
그 말은 register.php에 회원 가입 과정에 필요한 코드를 작성하면 된다는 말씀!
전체적으로 구현할 내용을 정리해보면
username 사용 여부 확인 - 중복 예방
name & username 존재 여부 확인 - 이미 계정을 만들었는지 확인
password & password_re 일치 여부 확인
이 정도가 되시겠다 👍
그럼 DB 연결부터하나하나 작성해보도록 하자.
[ register.php ]
<?php
require_once("db_connect.php");
require_once("register_func.php");
$name = trim($_POST['name']);
$username = trim($_POST['username']);
$password = trim($_POST['password']);
$password_re = trim($_POST['password_re']);
$mail = trim($_POST['mail']);
if(!checkUsername($conn,$username)) {
echo '<script>
alert("이미 사용 중인 Username입니다.");
location.href = "register.html";
</script>';
}
if(checkAccount($conn, $name, $username)) {
echo '<script>
alert("존재하는 계정이 있습니다.");
location.href = "register.html";
</script>';
}
if(!comparePass($password, $password_re)) {
echo '<script>
alert("Password가 일치하지 않습니다.");
location.href = "index.html";
</script>';
} else {
$query = "INSERT INTO user value ('$name','$username','$password','$mail')";
$res = mysqli_query($conn, $query);
if($res) {
echo '<script>
alert("성공적으로 회원가입 되었습니다.");
location.href = "login.html";
</script>';
} else {
die("Error : ".mysqli_error($conn));
}
}
mysqli_close($conn);
?>
register.php 내용은 위와 같다.
DB connection 부분은 db_connect.php에, 사용할 함수는 따로 구현해 register_func.php를
작성한 다음 require_once()로 import 해두었다.
그 다음으로 사용자가 입력한 값을 $_POST에서 가져와 각각의 변수에 할당한다.
$name = trim($_POST['name']);
$username = trim($_POST['username']);
$password = trim($_POST['password']);
$password_re = trim($_POST['password_re']);
$mail = trim($_POST['mail']);
여기서 사용된trim()은 입력된 파라미터 앞 or 뒤에 있는 공백을 제거하는 함수이다.
사용자의 파라미터가 모두 준비되었다면 3개의 if문을 거치게 된다.
(사용한 함수 설명은 register_func.php에서!)
[ 첫 번째 if문 : checkUsername ]
if(!checkUsername($conn,$username)) {
echo '<script>
alert("이미 사용 중인 Username입니다.");
location.href = "register.html";
</script>';
}
첫 번째 if문에서는 checkUsername 함수 결과가 false인 경우,
Pop up창을 통해 "이미 사용 중인 Username 입니다."를 띄우고 register.html로 이동한다.
이 조건을 True로 통과하게 되면 두 번째 if문이 실행된다.
[ 두 번째 if문 : checkAccount ]
if(checkAccount($conn, $name, $username)) {
echo '<script>
alert("존재하는 계정이 있습니다.");
location.href = "register.html";
</script>';
}
두 번째 if문에서는 checkAccount 함수 결과가 true인 경우,
Pop up 창을 띄우고 register.html로 이동한다.
마찬가지로 이 조건을 통과한 후에는 세 번째 if문을 거치게 된다.
[ 세 번째 if문 : comparePass ]
if(!comparePass($password, $password_re)) {
echo '<script>
alert("Password가 일치하지 않습니다.");
location.href = "register.html";
</script>';
} else {
마지막 if문에서 comparePass 함수 결과가 false라면 register.html로 이동하고
결과가 true로 else문이 실행되면
$query = "INSERT INTO user value ('$name','$username','$password','$mail')";
$res = mysqli_query($conn, $query);
if($res) {
echo '<script>
alert("성공적으로 회원가입 되었습니다.");
location.href = "login.html";
</script>';
} else {
die("Error : ".mysqli_error($conn));
}
앞의 모든 조건이 만족 되었다는 의미로 DB에 회원 정보를 저장하는 query를 실행한다.
query 실행에 문제가 있다면 Error를 출력하고
정상적으로 처리 되었다면 login.html로 이동하는 흐름이다.
(마지막엔 connection을 닫아준다 => mysqli_close)
쉽게 정리하면 정상적으로 회원 가입이 완료된 경우에만 login.html로 이동하게 되고
나머지 경우에는 Pop up이 띄워진다는 말씀!
그럼 마지막으로 import 된 코드를 살펴보도록 하자.
[ db_connect.php ]
<?php
define("DB_SERVER", "localhost");
define("DB_USERNAME", "admin");
define("DB_PASSWORD", "student1234");
define("DB_NAME", "test");
$conn = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_NAME);
if(!$conn) {
die("Error : ".mysqli_connect_error());
}
?>
db_connect.php 같은 경우는 DB에 접근해야 할 때마다 동일한 코드를 작성하기 번거롭기 때문에
connector를 만드는 부분까지 코드를 따로 작성해둔 파일이다.
define() 함수를 이용해 host, name, password, DB name을 정의해두고
mysqli_connect()로 연결을 시도한다.
만약 문제가 있다면 Error를 출력하고 그렇지 않다면 이 파일을 import한 파일에서는
$conn을 사용해 DB와 소통할 수 있을 것이다.
[ register_func.php ]
<?php
require_once("db_connect.php");
function checkUsername($conn, $username) {
$query = "SELECT * from user where username='$username'";
$res = mysqli_query($conn, $query);
if(mysqli_num_rows($res) > 0) {
return false;
} else {
return true;
}
}
function checkAccount($conn, $name, $username) {
$query = "SELECT * from user where name='$name' and username='$username'";
$res = mysqli_query($conn, $query);
if(mysqli_num_rows($res) > 0) {
return true;
} else {
return false;
}
}
function comparePass($password, $password_re) {
if($password === $password_re) {
return true;
} else {
return false;
}
}
?>
register_func.php에서는 query를 실행하는 함수가 있기 때문에
require_once()로 db_connect.php를 import 해둔다.
첫 번째 함수 checkUsername은
사용자가 입력한 username이 DB에 존재하는 지 확인하는 함수이다.
register 과정에서는 username이 이미 존재하면 사용자가 입력한 username을 사용할 수 없기 때문에
SQL 결과가 존재하는 경우에는 false를, 존재하지 않는 경우에는 true를 반환한다.
두 번째 함수 checkAccount는
사용자가 입력한 name & username이 동시에 일치하는 record가 있는 지 확인한다.
만약 사용자가 자신의 이름과 username을 입력해 이미 회원 가입한 경우라면
계정이 존재하기 때문에 SQL 결과가 나올 것이고 이럴 경우 사용자는 회원 가입을 다시 할 필요가 없다.
세 번째 함수 comparePass는
사용자가 입력한 password와 확인 차 입력한 password_re가 일치하는 지 확인하는 함수이다.
두 값이 일치하면 true를, 일치하지 않으면 false를 반환한다.
이렇게 따로 함수를 구현해 정리하면 하나의 파일에서 함수를 정의하고 호출할 필요 없기 때문에
코드를 줄이기에도 좋고 사용하는 함수를 한 눈에 알아보기에도 좋은 거 같다.
그럼 이제 import한 코드가 제대로 동작을 하는 지 확인하러 가보자!