회원가입 php
<?php
// DB 연결
$conn = new mysqli('192.168.100.10', 'web_user', 'web_pw@!', 'trainer_db');
// 연결 확인
if ($conn->connect_error) {
die("DB 연결 실패: " . $conn->connect_error);
}
// 회원가입 처리
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// 사용자 입력
$email = $_POST['email'];
$password = $_POST['password'];
$name = $_POST['name'];
$gender = $_POST['gender'];
$region = $_POST['region'];
// 비밀번호 해시화
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
// Prepared Statement 사용 (보안 필수)
$stmt = $conn->prepare("INSERT INTO trainer (email, password, name, gender, region) VALUES (?, ?, ?, ?, ?)");
$stmt->bind_param("sssss", $email, $hashed_password, $name, $gender, $region);
// 회원가입 쿼리 실행
if ($stmt->execute()) {
echo "회원가입이 완료되었습니다.<br>";
// 트래킹 정보 로그에 기록
$trainer_id = $stmt->insert_id; // 새로 추가된 trainer의 ID
$referral = $_POST['referral_code']; // referral_code는 폼에서 입력받음
$source = "web"; // 웹에서의 가입이므로 "web"으로 고정
// 로그 기록을 위한 Prepared Statement
$log_stmt = $conn->prepare("INSERT INTO signup_log (trainer_id, referral_code, source) VALUES (?, ?, ?)");
$log_stmt->bind_param("iss", $trainer_id, $referral, $source);
// 로그 기록 실행
if ($log_stmt->execute()) {
// 로그 기록 성공
echo "<br>회원가입 로그가 기록되었습니다.";
} else {
// 로그 기록 실패
echo "<br>로그 기록에 오류가 발생했습니다: " . $log_stmt->error;
}
// 로그 Statement 닫기
$log_stmt->close();
} else {
echo "오류: " . $stmt->error;
}
// 회원가입 Statement 닫기
$stmt->close();
}
// DB 연결 종료
$conn->close();
?>
연결하는 주소는 마리아디비 주소이고 내가 들어갈 회원 아이디와 비번을 잘 입력해야 한다.
이렇게 하면 PHP가 알아서 가장 안전한 방식(현재는 bcrypt) 으로 비밀번호를 암호화
bcrypt 는 암호화 방식 중에 하나.
PASSWORD_DEFAULT를 쓰는 이유
- PHP는 보안이 강화되면 새로운 알고리즘을 도입
- PASSWORD_DEFAULT를 쓰면 PHP가 알아서 가장 좋은 걸 써줌
- 나중에 PHP가 더 강력한 알고리즘을 도입해도 코드를 바꿀 필요 없이 자동으로 적용
🎯 지금은 뭘 쓰고 있나?
현재(PHP 7~8 기준) PASSWORD_DEFAULT는 bcrypt 알고리즘을 사용
결과는 $2y$로 시작하는 긴 문자열이 되고, 자동으로 salt도 추가
예시:$2y$10$QpUBBWGUqKbdfFQ6LaZxuOdjvEC.HN4SSUtM1Mx6bhyo5xF6pXwnW
PHP에서 stmt는 주로 Prepared Statement(준비된 문)를 의미하며, 데이터베이스 쿼리를 보다 안전하고 효율적으로 실행하기 위한 미리 준비된 SQL 문 객체를 지칭하는 이름으로 사용.
이 코드는 회원 가입 시, 사용자가 입력한 이메일, 비밀번호, 이름, 성별, 지역 정보를 DB에 안전하게 저장하기 위한 코드.
VALUES (?, ?)");
- 여기서 ?는 빈칸(자리표시자, placeholder) -값을 직접 적지 않고 ?로 비워놓는 이유는 SQL 인젝션을 막기 위해서
- ?는 앞의 넣을 정보들의 갯수와 맞춰야 함. ?로 해서 이 정보를 sql문이 아니라 단순한 글자로 인식하게 하고 ?에 사용자가 정보를 넣으면 sql문이 완성이 된다.
$stmt->bind_param("sssss", $email, $hashed_password, $name, $gender, $region);
ind_param()은 “자리표시자 ?에 이 값을 넣어줘” 라고 말하는 부분.
- "sssss": 각 자리의 데이터 형식을 뜻함.
- 문자 의미
s string (문자열) — 텍스트 데이터 i integer (정수) d double (소수) b blob (바이너리 데이터)
$hashed_password
비번은 암호화해서 저장
$conn->prepare(...) | SQL 템플릿 만들기 (?로 비워둠) |
bind_param(...) | ? 자리에 변수들을 연결함 |
s | 문자열(string)이라는 뜻 |
이 방식의 장점 | 보안 강화 (SQL 인젝션 방지), 깔끔한 코드 |
- prepare()는 SQL 문 구조만 준비 -그릇 만들기
- bind_param()는 값을 바인딩해서 그 구조를 완성 -그릇에 음식을 담는 것
- execute 는 앞에서 준비한 SQL 문을 실제로 실행하는 명령-> 입력한 이메일, 비밀번호, 이름 등을 DB에 저장하라! 라는 뜻.
- if ($stmt->execute()) → 실행이 성공했다면 echo → 화면에 메시지를 보여줘! 회원가입이 완료되었습니다.
오류가 생기면 이렇게 뜸. 위 코드에서 로그기록을 출력하는 것을 포함하므로 맨 아래에 위치함
회원가입 후 추가적인 트래킹 정보를 로그 테이블에 저장.
회원이 가입하면, 그 사람의 ID와 추천 코드(referral_code), 가입 경로(source = web)를 signup_log 테이블에 기록하는 것.
-> $trainer_id = $stmt->insert_id; // 새로 추가된 trainer의 ID
여기서 trainer_id는 insert_id인데 입력을 할 때마다 정수가 자동으로 증가하므로 1번,2번,3번식으로 저장이 된다.
$referral = $_POST['referral_code'];
추천인 코드를 입력받는다.
$source = "web"
source는 항상 web으로 저장되게 한다.
로그 기록은 signup_log테이블에 저장이 되며 정수값과 추천인코드, 소스는 웹으로 저장이된다.
bind_param에서 iss는 정수,문자열,문자열을 의미한다.
welcome.php
<?php
session_start();
if (!isset($_SESSION['name'])) {
header("Location: login.php");
exit;
}
$welcomeMessage = "환영합니다, " . $_SESSION['name'] . "님!";
?>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>Welcome!</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #131312;
color: #fff;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
}
.container {
text-align: center;
}
img {
margin-top: 20px;
}
</style>
</head>
<body>
<div class="container">
<h1><?php echo $welcomeMessage; ?></h1>
<h2>즐거운 시간되세요</h2>
<img src="logo.png" alt="로고 이미지" width="200">
</div>
</body>
</html>
isset()은 PHP에서 변수가 존재하는지 그리고 값이 설정되어 있는지 확인하는 함수.
함수는 주로 변수가 정의되었는지, 그리고 NULL이 아닌지 체크할 때 사용.
즉, 변수가 정상적으로 설정되었고 값이 할당되어 있는지 여부를 확인하는 데 유용.
isset($변수);
$변수: 확인하려는 변수
TRUE: 변수가 설정되어 있고, 값이 NULL이 아닐 때.
FALSE: 변수가 설정되지 않았거나, 값이 NULL일 때.
php에서 이걸 불러와서 깔끔하게 정리
'WEB' 카테고리의 다른 글
웹 페이지 만들기 (6) 아파치 보안 설정 (0) | 2025.05.22 |
---|---|
웹페이지 만들기 (5) 각 페이지 별로 만들기, 상대경로 설정, css연결 (0) | 2025.05.22 |
웹페이지 만들기 (3) 회원가입 폼 (0) | 2025.05.21 |
웹페이지 만들기(2) 로그인 php+ maria DB 연결 (0) | 2025.05.21 |
웹페이지 만들기(1) 메인 페이지 - html + css + 로그인 폼 (1) | 2025.05.21 |