이전에 간단하게 로그인 페이지를 구현하였고 다음으로 회원가입 페이지를 만들어볼려고합니다.
기본적인 페이지 구성이 안되어 있으신 분들은 위에 글을 참고해주시면 감사합니다.
포스팅 목차
1. 데이터베이스 설정
데이터베이스 접근 후 회원 테이블을 우선적으로 생성을 합니다.
-- MariaDB 접속
mysql -u root -p
-- 회원 테이블 생성
USE community_db;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
name VARCHAR(100) NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
2. 회원가입 페이지 생성 (register.php)
nano /var/www/html/auth/register.php
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원가입</title>
<link rel="stylesheet" href="../css/style.css">
</head>
<body>
<div class="register-container">
<h2>회원가입</h2>
<form action="register_process.php" method="POST">
<div class="form-group">
<input type="text" name="username" placeholder="아이디" required>
</div>
<div class="form-group">
<input type="password" name="password" placeholder="비밀번호" required>
</div>
<div class="form-group">
<input type="password" name="confirm_password" placeholder="비밀번호 확인" required>
</div>
<div class="form-group">
<input type="email" name="email" placeholder="이메일" required>
</div>
<div class="form-group">
<input type="text" name="name" placeholder="이름" required>
</div>
<div class="form-group">
<button type="submit">가입하기</button>
</div>
</form>
<div class="links">
<a href="../index.php">로그인으로 돌아가기</a>
</div>
</div>
</body>
</html>
3. 회원가입 처리 파일 생성 (register_process.php)
PHP의 password_hash() 함수를 사용하여 암호화합니다.
원본 비밀번호를 알 수 없음, 같은 비밀번호라도 매번 다른 해시값 생성복호화가 불가능
나중에 로그인할 때는 password_verify() 함수를 사용하여 비밀번호를 검증
if (password_verify($_POST[‘password’], $hashed_password)) {
// 로그인 성공
} else {
// 로그인 실패
nano /var/www/html/auth/register_process.php
<?php
include '../config.php';
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = mysqli_real_escape_string($conn, $_POST['username']);
$password = password_hash($_POST['password'], PASSWORD_DEFAULT); // 비밀번호 암호화
$email = mysqli_real_escape_string($conn, $_POST['email']);
$name = mysqli_real_escape_string($conn, $_POST['name']);
// 아이디 중복 검사
$check_query = "SELECT * FROM users WHERE username = '$username' OR email = '$email'";
$result = mysqli_query($conn, $check_query);
if (mysqli_num_rows($result) > 0) {
echo "<script>
alert('이미 사용중인 아이디 또는 이메일입니다.');
history.back();
</script>";
} else {
// 회원가입 처리
$query = "INSERT INTO users (username, password, email, name)
VALUES ('$username', '$password', '$email', '$name')";
if (mysqli_query($conn, $query)) {
echo "<script>
alert('회원가입이 완료되었습니다.');
location.href='../index.php';
</script>";
} else {
echo "<script>
alert('오류가 발생했습니다.');
history.back();
</script>";
}
}
}
?>
4. CSS 스타일 적용
nano /var/www/html/css/style.css
/* 기존 CSS에 추가 */
.register-container {
background-color: white;
padding: 20px;
border-radius: 5px;
box-shadow: 0 0 10px rgba(0,0,0,0.1);
width: 300px;
}
.register-container h2 {
text-align: center;
margin-bottom: 20px;
}
.form-group {
margin-bottom: 15px;
}
input {
width: 100%;
padding: 8px;
border: 1px solid #ddd;
border-radius: 4px;
box-sizing: border-box;
}
button {
width: 100%;
padding: 10px;
background-color: #4CAF50;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
}
button:hover {
background-color: #45a049;
}
5. 파일 권한 설정
Apache 웹 서버가 파일을 읽고 쓸 수 있도록 소유권을 부여 및 웹 서버가 파일을 실행하고 수정할 수 있게 함
소유자(apache)에게 읽기(4), 쓰기(2), 실행(1) 권한 부여
그룹과 기타 사용자에게 읽기(4)와 실행(1) 권한만 부여
보안을 위해 다른 사용자는 파일을 수정할 수 없게 제한
chown -R apache:apache /var/www/html/auth
chmod -R 755 /var/www/html/auth
구성이 완료되면 페이지 접근 후 회원가입 진행
SELECT username, email, name, created_at FROM users;
회원가입 완료 시 데이터 베이스의 테이블에 저장적으로 정보가 조회되는지 확인.