#php #mysql #회원가입 #로그인 #로그아웃
안녕하세요. Gi-1의 개발일기입니다.
최근 생활코딩의 게시판 만들기를 진행 하였는데 이번에는 로그인&페이징&첨부파일첨부&댓글 기능까지 구현 해 보려고 합니다.
이에 앞서 로그인 페이지 먼저 정리를 해봤어요.
[결과화면 미리보기]
css 작업은 별도로 하지 않았습니다.
포트폴리오 용으로 사용할 때 작업 하시면 좋을 것 같습니다.
[mysql]
CREATE TABLE member
(
no INT(11) NOT NULL AUTO_INCREMENT,
id char(15),
user_id char(15),
name char(15),
nick_name char(15),
birth char (15),
sex char(6),
tel char(12),
email char(30),
pw char(30),
PRIMARY KEY(no)
)
[index.php]
<p>
<?php if(isset($member['user_id'])){
echo $member['user_id']."님 안녕하세요.";
echo '<a href="./member/logout.php">[로그아웃]</a>';
} else { ?>
<a href="./member/login.php">[로그인]</a><br>
<a href="./member/join.php">[회원가입]</a>
<?php } ?>
</p>
[join.php]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>회원가입</title>
<link rel="stylesheet" href="../css/style.css">
</head>
<body>
<h1>
[회원가입]
</h1>
<!--
필요사항
테이블ID : id
회원ID : user_id
이름 : name
닉네임 : nick_name
생년월일 : birth
연락처 : tel
이메일 : email
성별 : sex
비밀번호 : pw
주소1 : addr_1
주소2 : addr_2
-->
<?php
$subject = "aaasss$%#";
if (!preg_match("/^[a-z0-9]+$/", $subject)) {
echo "대문특문포함됨";
} else {
echo "포함안됨" ;
}
?>
<form action="./join_process.php" name='member' method='post'>
<input type="hidden" name='id' value='test'>
<table class="stat">
<tr>
<th>회원아이디</th>
<td><input type="text" name='user_id'></td>
</tr>
<tr>
<th>비밀번호</th>
<td><input type="text" name='pw'></td>
</tr>
<tr>
<th>닉네임</th>
<td><input type="text" name='nick_name'></td>
</tr>
<tr>
<th>이름</th>
<td><input type="text" name='name'></td>
</tr>
<tr>
<th>생년월일</th>
<td><input type="text" name='birth'></td>
</tr>
<tr>
<th>성별</th>
<td>
<input type="radio" name='sex' value='male'>남자
<input type="radio" name='sex' value='female'>여자
</td>
</tr>
<tr>
<th>연락처</th>
<td><input type="text" name='tel'></td>
</tr>
<tr>
<th>이메일</th>
<td><input type="text" name='email'></td>
</tr>
<tr>
<th>주소</th>
<td><input type="text" name='addr_1'></td>
</tr>
<tr>
<th>상세주소</th>
<td><input type="text" name='addr_2'></td>
</tr>
</table>
<input type="submit" value='회원가입'>
</form>
</body>
</html>
[join_process.php]
<?php
include("../lib/db_connect.php");
$id = $_POST['id'];
$user_id=$_POST['user_id'];
$name = $_POST['name'];
$nick_name = $_POST['nick_name'];
$birth = $_POST['birth'];
$sex = $_POST['sex'];
$tel = $_POST['tel'];
$email = $_POST['email'];
$pws = $_POST['pw'];
$pw = md5($pws);
$addr_1 = $_POST['addr_1'];
$addr_2 = $_POST['addr_2'];
$regdate=date("YmdHis", time());
$ip=getenv("REMOTE_ADDR");
if(!$user_id){
error("아이디를 입력하세요.");
}
if(substr($user_id,12)){
error("아이디는 최대 12자까지 입력할 수 있습니다.");
}
// substr : 문자열 추출함수 (추출대상, 추출시작위치, 추출문자개수)
if (!preg_match("/^[a-z0-9]*$/", $user_id)) {
error("아이디는 소문자, 숫자만 입력할 수 있습니다.");
}
if(!$name){
error("이름을 입력하세요.");
}
if(strlen($name)<6 || strlen($name)>15){
error("이름은 2글자 이상 5글자 이하만 입력 가능합니다.");
}
// 문자열 길이를 숫자로 반환함. 한글은 한글자당 3byte
if(!$nick_name){
error("닉네임을 입력하세요.");
}
if(!$birth){
error("생년월일을 입력하세요.");
}
if(strlen($birth)<8 || strlen($birth)>8){
error("생년월일을 8자로 입력해 주세요.");
}
if(!$sex){
error("성별을 선택하세요.");
}
if(!$tel){
error("연락처를 입력하세요.");
}
if(strlen($tel)<8 || strlen($birth)>15){
error("연락처는 8~15자리로 입력 해주세요.");
}
if(!$email){
error("이메일을 입력하세요.");
}
if(!preg_match("/^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$/i", $email)){
error("이메일 형식을 올바르게 입력해 주세요.");
};
if(!$pws){
error("비밀번호를 입력하세요.");
}
if(!$addr_1){
error("주소를 입력하세요.");
}
$sql = "
INSERT INTO member(
id,
user_id,
name,
nick_name,
birth,
sex,
tel,
email,
pw,
addr_1,
addr_2,
regdate,
ip
)
VALUES(
'{$id}',
'{$user_id}',
'{$name}',
'{$nick_name}',
'{$birth}',
'{$sex}',
'{$tel}',
'{$email}',
'{$pw}',
'{$addr_1}',
'{$addr_2}',
'{$regdate}',
'{$ip}'
)
";
$result = mysqli_query($conn, $sql);
if(!$result){
echo '저장하는 과정에서 문제가 생겼습니다. 관리자에게 문의해주세요.';
// 평상시에는 die("");
print(mysqli_error($conn));
} else { ?>
<script>
alert("회원가입에 성공하였습니다.");
location.href="../index.php";
</script>
<?php } ?>
[login.php]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>로그인</title>
</head>
<body>
<h1>
[로그인]
</h1>
<form action="../member/login_process.php" method='post' name='login'>
<table>
<tr>
<th>회원아이디</th>
<td><input type="text" name='user_id'></td>
</tr>
<tr>
<th>비밀번호</th>
<td><input type="text" name='pw'></td>
</tr>
</table>
<input type="submit" value='로그인'>
</form>
</body>
</html>
[login_process.php]
<?php
include("../lib/db_connect.php");
ob_start();
// ob_start란?
// 출력 버퍼링을 켜는 PHP 명령어
// 출력 버퍼링이 켜져 있는 동안 헤더를 제외한 스크립트의 모든 출력을 내부 버퍼에 저장하며 실제 전송하지 않는다.
$user_id = $_POST['user_id'];
$pws = $_POST['pw'];
$pw = md5($pws);
// md5 = 이 함수는 문자열에서 md5 해시값을 생성해 준다.
$sql = "
SELECT * from member WHERE user_id = '{$user_id}';
";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_array($result);
if(!$user_id){
error("아이디를 입력하세요");
} else if(!$row['user_id']){
error("존재하지 않는 아이디 입니다.");
}
if(!$pw){
error("비밀번호를 입력하세요.");
} else if($pw != $row['pw']){
error("비밀번호가 틀렸습니다.");
}
if($row['user_id'] && $row['pw'] == $pw){
$tmp=$row['user_id']."@@".$row['pw'];
setcookie("cookies", "$tmp", time()+86400, "/board221002");
// setcookie("쿠키이름", "저장내용", "쿠키유효시간", "저장경로");
}
ob_end_flush();
?>
<script>
alert("<?=$row['user_id']?>님 안녕하세요.");
location.href="../index.php";
</script>
[logout.php]
<?php
setcookie("cookies", "", 0, "/board221002");
// setcookie("cookies", "$tmp", time()+86400, "/board221002");
?>
<script>
alert("로그아웃 되었습니다.");
location.href ="/board221002/index.php";
</script>
'코드정리 > Php & Mysql' 카테고리의 다른 글
[Php] 게시판 파일 업로드 / 파일권한(chmod) / Unlink (0) | 2023.02.05 |
---|---|
[PHP] 리퍼러 체크 후 검색 도메인 알아내기 [네이버, 구글, 다음] (0) | 2022.11.18 |
[생활코딩] WEB3 - PHP & MySQL, PHP로 게시판 만들기 (0) | 2022.10.09 |
[생활코딩 _ Mysql ] Table 생성 / Data Type (0) | 2022.09.01 |
[생활코딩 _ Mysql] 메뉴얼 및 관련자료 (0) | 2022.08.28 |
댓글