✅ Let's Leaning PHP! - MySql 연동하기 (#6)
https://blog.hyb.kr/45 와 연결되는 내용입니다.
MYSQL에서 아래와 같은 구문을 입력 해 줍니다.
USE php;
ALTER TABLE `user` CHANGE `password` `password` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;
- ALTER : 이미 존재하는 테이블의 구조나 형식등을 바꾸기 위해 사용한다
- TABLE : TABLE을 수정하겠다는 의미이다.
- `user' CHANGE : user 테이블을 수정하겠다는 의미임.
- `password` `password` VARCHAR(100) : password 필드의 타입을 VARCHAR로,
길이를 100으로 설정하겠다는 의미임.
💖 코드작성 (회원가입)
나머지 코드는 이전 시간과 동일합니다.
<!-- index.php -->
<form method="POST" action="regok.php">
<input type="text" name="name" placeholder="Name" /> <br />
<input type="text" name="id" placeholder="ID" /> <br />
<input type="password" name="password" placeholder="Password" /><br />
<input type="password" name="repassword" placeholder="Re Password" /><br />
<button type="submit">제출</button><br />
<a href="select.php"><button type="button">필드 조회하러 가기</button></a> <br />
</form>
그 다음, regok.php 라는 파일을 생성해 줍시다.
<?php
include "./db.php";
if($_POST["id"] == "" || $_POST["password"] == "" || $_POST["repassword"] == "" || $_POST['name'] == ""){
echo '<script> location.href="/reg_bk"; </script>';
} else {
echo $_POST['id'];
if($_POST['password']!=$_POST['repassword']){
echo '<script> alert("패스워드가 일치하지 않습니다."); history.back(); </script>';
} else {
$sql = mysqli_query($conn, "SELECT EXISTS (SELECT * from user WHERE id='".$_POST['id']."') as success");
$usernamecount = $sql->fetch_array();
if($usernamecount['success']==1) {
echo ("<script>alert('중복된 아이디입니다!'); history.back();</script>");
} else {
$name = $_POST['name'];
$id = $_POST['id'];
$password = password_hash($_POST['password'], PASSWORD_DEFAULT);
$date = date("Y-m-d", time());
$result = mysqli_query($conn, "INSERT INTO user(id,password,name,created)VALUES('".$id."','".$password."','".$name."','".$date."')") or die ("알수없는 오류");
echo ("<script>alert('회원가입이 되었습니다!'); location.href='./index.php';</script>");
}
}
}
?>
여기까지 작성하고 다시 페이지에서 값을 입력하고 제출을 누르면
회원가입이 완료되었다며 index.php로 보낼 것이다.
DB의 값을 확인 해 보면 아래와 같을 텐데,
첫 번째 부터, idx, id, password, name, created 테이블이다.
특히 주목해야할 부분은 password 부분이 인간의 눈으론 투시할 수 없는(?) 문자로 바뀌었는데.
이는 password_hash() 함수로 인해 암호화 된 것이다.
사용 형식은
password_hash(varriable, PASSWORD_DEFAULT);
if($_POST["id"] == "" || $_POST["password"] == "" || $_POST["repassword"] == "" || $_POST['name'] == ""){
- 저번 시간에 POST/GET 방식으로 php파일에 값을 전송하는 방법을 배웠습니다.
post로 전달받은 id 값과, password, repassword, name이 공백
즉, 입력하지 않았다면 돌려보냅니다.
if($_POST['password']!=$_POST['repassword']){
- 마찬가지로 password 값과 repassword 값이 일치하지 않는다면 돌려보내는 코드입니다.
$sql = mysqli_query($conn, "SELECT EXISTS (SELECT * from user WHERE id='".$_POST['id']."') as success");
모든 조건을 만족한다면 mysqli_query 라는 함수로 SQL문을 실행시켜 줍니다.
$conn은 db.php에서 연결한 우리의 데이터베이스를 뜻하고,
user 테이블에서 id 필드값이 id값과 같은 필드만 불러옵니다.
$usernamecount = $sql->fetch_array();
- 위에서 담아놓은 SQL 질의 값을 배열의 형태로 가져와 usernamecount 라는 변수에 넣습니다.
if($usernamecount['success']==1) {
- 쉽게 생각하면 입력받은 id가 중복되면 돌려보내는 코드 입니다.
$password = password_hash($_POST['password'], PASSWORD_DEFAULT);
- POST로 넘겨받은 password 값을 hash 함수로 암호화 시킵니다.
$result = mysqli_query($conn, "INSERT INTO user(id,password,name,created)VALUES('".$id."','".$password."','".$name."','".$date."')") or die ("알수없는 오류");
- 위와 마찬가지로 user 테이블에 id, password, name, created 필드에
id, password, name, date 변수값을 각각 집어넣는 SQL문을 실행합니다.
오류가 난다면 알 수 없는 오류 라고 출력되고,
만약 오류가 없다면 회원가입이 완료될 것 입니다.
💖 코드작성 (로그인)
index.php 파일을 아래와 같이 수정해 줍니다.
<!-- index.php -->
<?php include "./db.php"; ?>
<h1>회원가입</h1>
<form method="POST" action="regok.php">
<input type="text" name="name" placeholder="Name" /> <br />
<input type="text" name="id" placeholder="ID" /> <br />
<input type="password" name="password" placeholder="Password" /><br />
<input type="password" name="repassword" placeholder="Re Password" /><br />
<button type="submit">제출</button><br />
<a href="select.php"><button type="button">필드 조회하러 가기</button></a> <br />
</form>
<h1>로그인</h1>
<form method="POST" action="logok.php">
<input type="text" name="id" placeholder="ID" /> <br />
<input type="password" name="password" placeholder="Password" /><br />
<button type="submit">제출</button><br />
</form>
<?php
if(isset($_SESSION['id'])){ ?>
<h2><?php echo $_SESSION['name']; ?></h2>
<?php } else { ?>
<h2>로그인이 필요합니다.</h2>
<?php } ?>
if(isset($_SESSION['id'])){
- 세션 id값이 있냐고 물어봅니다. (로그인 하면 세션이 생깁니다)
logok.php 파일을 만들어 줍니다.
<?php
include "./db.php";
if($_POST["id"] == "" || $_POST["password"] == ""){
echo '<script> location.href="./login.php"; </script>';
} else {
$id = $_POST['id'];
$pwd = $_POST['password'];
$sql = mysqli_query($conn,"select * from user where id='".$id."'") or die ("알수없는 오류");
$member = $sql->fetch_array();
$hash_pwd = $member['password'];
if(password_verify($pwd, $hash_pwd))
{
$_SESSION['id'] = $member["id"];
$_SESSION['name'] = $member["name"];
echo "<script>alert('로그인 성공!'); location.href='./index.php';</script>";
}
else{
echo "<script>alert('아이디 혹은 비밀번호를 확인하세요.'); history.back();</script>";
}
}
?>
$sql = mysqli_query($conn,"select * from user where id='".$id."'") or die ("알수없는 오류");
- 전송받은 id값과 db에 있는 id값이 일치하는 행을 가져옵니다. (select)
if(password_verify($pwd, $hash_pwd)) {
- 기존 hash함수로 암호화된 문자열은 verify 함수로 복호화시킬 수 있습니다.
암호화된 비밀번호를 복호화 시켰을 때 일치하냐 를 물어보는 내용입니다.
$_SESSION['id'] = $member["id"];
$_SESSION['name'] = $member["name"];
- 세션 id값을 db에 id 필드로,
세션 name값을 db에 name 필드로 넣습니다.
이제, logout.php 라는 파일을 만들어줍니다.
<?php
include "./db.php";
session_destroy();
?>
<script>alert("로그아웃 완료!");</script>
<meta http-equiv="refresh" content="0; url=/">
session_destroy();
- 세션을 파괴합니다. (세션을 파괴함으로써 자연스럽게 로그아웃이 되는것)
수고하셨습니다!
'Web > PHP' 카테고리의 다른 글
✅ Let's Leaning PHP! - MySql 연동하기 (#6) (0) | 2020.04.05 |
---|---|
✅ Let's Leaning PHP! - 짝퉁 로그인 만들기(?) (#5) (0) | 2020.03.31 |
✅ Let's Leaning PHP! - 값 전송하기 (#4) (0) | 2020.03.31 |
✅ Let's Leaning PHP! - 변수 다루기 (#3) (0) | 2020.03.31 |
✅ Let's Leaning PHP! - echo 다루기 (#2) (0) | 2020.03.27 |
댓글