php 회원가입&로그인 페이지
회원가입php
<form action="joinSave.php" name="join" method="post">
<fieldset>
<legend class="blind">회원가입 영역</legend>
<div>
<label for="youEmail" class="required">이메일</label>
<input type="email" id="youEmail" name="youEmail" placeholder="이메일을 입력해주세요." class="inputStyle" required>
</div>
<div>
<label for="youName" class="required">이름</label>
<input type="text" id="youName" name="youName" placeholder="이름을 입력해주세요." class="inputStyle" required>
</div>
<div>
<label for="youPass" class="required">비밀번호</label>
<input type="password" id="youPass" name="youPass" placeholder="비밀번호를 입력해주세요." class="inputStyle" required>
</div>
<div>
<label for="youPassC" class="required">비밀번호 확인</label>
<input type="password" id="youPassC" name="youPassC" placeholder="비밀번호를 다시한번 입력해주세요." class="inputStyle" required>
</div>
<div>
<label for="youPhone" class="required">연락처</label>
<input type="text" id="youPhone" name="youPhone" placeholder="연락받으실 번호를 입력해주세요." class="inputStyle" required>
</div>
<button type="submit" class="btnStyle">회원가입 완료</button>
</fieldset>
</form>
보충설명
회원가입 양식을 만드는 코드입니다.
<form> 태그: HTML에서 입력 양식(form)을 만들기 위해 사용되는 태그입니다. 이 태그의 action 속성은 회원가입 양식이 제출되었을 때 데이터가 전송될 서버 측 스크립트 파일의 경로를 지정합니다. method 속성은 데이터를 전송하는 방식을 지정합니다.<fieldset> 태그: 입력 양식 요소들을 묶어서 관련 요소들끼리 그룹화하고, 각 그룹에 대한 설명 등을 제공할 수 있도록 하는 태그입니다.
<legend> 태그: <fieldset> 태그로 묶인 입력 양식 그룹에 대한 제목을 지정합니다.
<label> 태그: 사용자 인터페이스(UI) 요소와 연결되는 레이블을 정의합니다.
<input> 태그: 사용자가 데이터를 입력할 수 있는 입력 요소를 생성합니다. type 속성은 입력 요소의 타입을 지정합니다. id 속성은 해당 입력 요소를 식별할 수 있도록 지정합니다. name 속성은 해당 입력 요소의 이름을 지정합니다. placeholder 속성은 사용자가 입력할 수 있는 내용을 설명하는 힌트를 제공합니다. required 속성은 해당 입력 요소에 반드시 데이터를 입력해야 함을 나타냅니다.
<button> 태그: 사용자가 클릭하여 양식을 제출할 수 있는 버튼을 생성합니다. type 속성은 버튼의 타입을 지정합니다. class 속성은 해당 요소의 스타일을 지정할 수 있는 클래스를 지정합니다.
위의 코드를 요약하면, 이메일, 이름, 비밀번호, 비밀번호 확인, 연락처를 입력받는 회원가입 양식을 생성하고, 사용자가 제출 버튼을 클릭하면 입력된 데이터가 joinSave.php 파일로 전송되어 회원가입이 완료됩니다.
회원가입완료php
<?php
include "../connect/connect.php";
$youEmail = $_POST['youEmail'];
$youName = $_POST['youName'];
$youPass = $_POST['youPass'];
$youPassC = $_POST['youPassC'];
$youPhone = $_POST['youPhone'];
$regTime = time();
// echo $youEmail,$youName,$youPass,$youPhone;
// $sql = "INSERT INTO members(youEmail, youName, youPass, youPhone, regTime) VALUES('$youEmail', '$youName', '$youPass', '$youPhone', '$regTime')";
// $connect -> query($sql);
// 사용자가 데이터 입력 -> 유효성 검사 -> 통과 -> 회원가입(쿼리문전송)
// 사용자가 데이터 입력 -> 유효성 검사 -> 통과(이메일주소/핸드폰)(O) -> 회원가입(쿼리문전송)
// 사용자가 데이터 입력 -> 유효성 검사 -> 통과(X) -> 회원가입(쿼리문전송)
// 메세지 출력
function msg($alert){
echo "<p class='intro__text'>$alert</p>";
};
// 이메일 유효성 검사
$check_mail = preg_match("/^[a-z0-9_+.-]+@([a-z0-9-]+\.)+[a-z0-9]{2,4}$/", $youEmail);
if($check_mail == false){
msg("이메일이 잘못되었습니다. 다시 확인해 주세요");
exit;
}
// 이름 유효성 검사
$check_name = preg_match("/^[가-힣]{6,15}$/", $youName);
if($check_name == false){
msg("이름은 한글로 2자에서 5자까지 가능합니다.");
exit;
}
// 비밀번호 유효성 검사
if($youPass !== $youPassC){
msg("비밀번호가 일치하지 않습니다. 다시 한번 확인해주세요.");
exit;
}
// $youPass = sha1($youPass);
// 휴대폰 번호 유효성 검사
$check_number = preg_match("/^(010|011|016|017|018|019)-[0-9]{3,4}-[0-9]{4}$/", $youPhone);
if($check_number == false){
msg("번호가 정확하지 않습니다. 올바른 번호(000-0000-0000) 형식으로 작성해주세요.");
exit;
}
// 이메일 중복검사
$isEmailCheck = false;
$sql = "SELECT youEmail FROM MEMBERS WHERE youEmail = '$youEmail'";
$result = $connect -> query($sql);
if($result){
$count = $result -> num_rows;
if($count == 0){
$isEmailCheck = true;
} else {
msg("이미 가입된 이메일 주소입니다. 로그인 해주세요!");
exit;
}
} else {
msg("에러발생1! 관리자에게 문의하세요.");
exit;
}
// 폰번호 중복검사
$isPhoneCheck = false;
$sql = "SELECT youPhone FROM MEMBERS WHERE youPhone = '$youPhone'";
$result = $connect -> query($sql);
if($result){
$count = $result -> num_rows;
if($count == 0){
$isPhoneCheck = true;
} else {
msg("이미 가입된 번호 입니다. 로그인 해주세요!");
exit;
}
} else {
msg("에러발생1! 관리자에게 문의하세요.");
exit;
}
// 회원가입
if($isEmailCheck == true && $isPhoneCheck == true){
// 데이터 입력하기
$sql = "INSERT INTO members(youEmail, youName, youPass, youPhone, regTime) VALUES('$youEmail', '$youName', '$youPass', '$youPhone', '$regTime')";
$connect -> query($sql);
if($result){
msg("회원가입을 축하합니다! 로그인해주세요! <br><div class='intro__btn'><a href='#'>로그인</a></div>");
exit;
} else {
msg("에러발생3: 관리자에게 문의하세요.");
exit;
}
} else {
msg("이미 회원가입이 되어있습니다. 로그인해주세요.");
exit;
}
?>
보충설명
해당 코드는 PHP 언어로 작성된 회원가입 페이지의 서버 사이드 코드입니다.
코드의 전반적인 기능은 사용자가 입력한 회원가입 정보의 유효성을 검사한 후, 데이터베이스에 회원정보를 저장하는 것입니다.
코드의 구체적인 동작은 다음과 같습니다.
connect.php 파일을 include하여 데이터베이스에 연결합니다.
사용자가 입력한 이메일, 이름, 비밀번호, 비밀번호 확인, 전화번호, 가입 시간 정보를 $_POST 배열에서 가져옵니다.
msg 함수를 정의하여, 메시지를 출력하는 역할을 합니다.
사용자가 입력한 이메일 주소의 유효성을 검사합니다. 유효하지 않은 경우 msg 함수를 이용하여 메시지를 출력하고 종료합니다.
사용자가 입력한 이름의 유효성을 검사합니다. 유효하지 않은 경우 msg 함수를 이용하여 메시지를 출력하고 종료합니다.
사용자가 입력한 비밀번호와 비밀번호 확인 값이 일치하는지 검사합니다. 일치하지 않은 경우 msg 함수를 이용하여 메시지를 출력하고 종료합니다.
사용자가 입력한 전화번호의 유효성을 검사합니다. 유효하지 않은 경우 msg 함수를 이용하여 메시지를 출력하고 종료합니다.
입력한 이메일 주소가 이미 존재하는지 데이터베이스에서 검사합니다. 이미 존재하는 경우 msg 함수를 이용하여 메시지를 출력하고 종료합니다.
입력한 전화번호가 이미 존재하는지 데이터베이스에서 검사합니다. 이미 존재하는 경우 msg 함수를 이용하여 메시지를 출력하고 종료합니다.
이메일 주소와 전화번호가 모두 중복되지 않은 경우, 데이터베이스에 회원정보를 저장하고 msg 함수를 이용하여 메시지를 출력합니다.
데이터베이스에 회원정보를 저장하는 과정에서 에러가 발생한 경우 msg 함수를 이용하여 메시지를 출력하고 종료합니다.
코드의 일부분이 주석 처리되어 있어서, 주석을 해제하면 데이터베이스에 회원정보를 저장하는 코드가 실행됩니다.
로그인php
<form action="loginSave.php" name="loginSave" method="post">
<fieldset>
<legend class="blind">로그인 영역</legend>
<div>
<label for="youEmail" class="blind required">이메일</label>
<input type="email" id="youEmail" name="youEmail" placeholder="이메일" class="inputStyle" required>
</div>
<div>
<label for="youPass" class="blind required">비밀번호</label>
<input type="password" id="youPass" name="youPass" placeholder="비밀번호" class="inputStyle" required>
</div>
<button type="submit" class="btnStyle2 mt20">로그인</button>
</fieldset>
</form>
보충설명
이 코드는 HTML로 작성된 로그인 폼(form)입니다. 이 폼은 "loginSave.php" 라는 파일로 데이터를 전송하며, 전송 방식(method)은 POST를 사용합니다.
이 폼은 이메일과 비밀번호를 입력하는 필드(field)를 포함하고 있습니다. 이메일 입력란은 이메일 형식을 입력받는 타입(type)으로 되어 있으며, 필수 입력 필드로 지정되어 있습니다. 비밀번호 입력란은 비밀번호 형식을 입력받는 타입으로 되어 있으며, 또한 필수 입력 필드로 지정되어 있습니다.
로그인 버튼은 "로그인" 이라는 텍스트를 가진 버튼입니다. 버튼의 타입은 submit으로 설정되어 있으며, 이 버튼을 누르면 폼에 입력된 데이터가 서버로 전송됩니다. 버튼에는 "btnStyle2" 라는 class가 적용되어 있습니다.
이 코드는 또한 "legend" 태그를 사용하여 로그인 영역을 설명하는 "legend" 요소를 만듭니다. label 요소는 이메일 및 비밀번호 입력 필드와 연결되어 있습니다. 입력 필드와 연결된 라벨에는 "youEmail" 및 "youPass"라는 id 값이 할당되어 있으며, 이는 라벨의 "for" 속성과 일치합니다. 이를 통해 스크린 리더기나 다른 보조 기술을 사용하는 사용자가 입력 필드와 라벨을 연결하여 폼을 보다 쉽게 이해할 수 있습니다.
로그인 완료php
<?php
include "../connect/connect.php";
include "../connect/session.php";
$youEmail = $_POST['youEmail'];
$youPass = $_POST['youPass'];
// echo $youEmail, $youPass;
// 데이터 출력
function msg($alert){
echo "<p class='intro__text'>$alert</p>";
}
// 데이터 조회
$sql = "SELECT memberID, youEmail, youName, youPass FROM members WHERE youEmail = '$youEmail' AND youPass = '$youPass'";
$result = $connect -> query($sql);
if($result){
$count = $result -> num_rows;
if($count == 0){
msg("이메일 또는 비밀번호가 틀렸습니다. 다시 한번 확인해주세요!<br><div class='intro__btn'><a href='../login/login.php'>로그인</a></div>");
} else {
// 로그인 성공
$memberInfo = $result -> fetch_array(MYSQLI_ASSOC);
// echo "<pre>";
// var_dump($memberInfo);
// echo "</pre>";
// 세션 생성
$_SESSION['memberID'] = $memberInfo['memberID'];
$_SESSION['youEmail'] = $memberInfo['youEmail'];
$_SESSION['youName'] = $memberInfo['youName'];
Header("Location: ../main/main.php");
}
}
?>
보충설명
이 코드는 로그인 정보를 받아서 데이터베이스에서 일치하는 정보가 있는지 조회하는 PHP 코드입니다.
먼저, connect/connect.php와 connect/session.php를 include합니다.
그리고 POST 방식으로 전달된 youEmail과 youPass를 변수에 저장합니다.
msg 함수는 데이터 출력을 위해 사용되는 함수입니다.
그 다음, 조회를 위한 SQL 쿼리를 작성합니다. members 테이블에서 youEmail과 youPass가 입력한 값과 일치하는 행을 조회합니다.
$result에 쿼리 결과를 저장합니다. 결과가 있다면, num_rows를 통해 조회된 행 수를 확인하고, 일치하는 값이 없다면 msg 함수를 호출하여 "이메일 또는 비밀번호가 틀렸습니다." 라는 메시지를 출력하고 다시 로그인 페이지로 돌아가는 링크를 제공합니다.
조회된 값이 있다면, 로그인이 성공한 것으로 판단하고, fetch_array 함수를 사용하여 조회된 데이터를 배열로 가져옵니다. 그리고, $_SESSION을 사용하여 세션을 생성합니다. memberID, youEmail, youName 키로 해당 값을 저장합니다.
마지막으로, Header 함수를 사용하여 로그인 성공 후 메인 페이지로 이동합니다.