Php 로그인 DB 연동 - Php logeu-in DB yeondong

회원가입에 이어

데이터 베이스 저장된 회원가입된 친구들을 로그인/로그아웃 시켜주도록 하자

https://itsaessak.tistory.com/184

참고한 매우 감사한 블로그.. 사실 참고보다 걍 복붙한다음에 내가 필요한대로 바꾸고 코드분석한거임

만들기 전에 나는 다 만들었으므로 어떻게 운영되는지부터 보여주겠다

매우 간단하게 만들었으므로..디자인은 무시하도록하자

Php 로그인 DB 연동 - Php logeu-in DB yeondong

사이트를 처음들어가면

로그인버튼 / 회원가입 버튼이 있다

일단 회원가입을 먼저 시키면

JOINUS버튼을 누르면

Php 로그인 DB 연동 - Php logeu-in DB yeondong

Php 로그인 DB 연동 - Php logeu-in DB yeondong

중복검사 어쩌구들이 있는데 그건 저번 글을 참고하면된다

데이터베이스에 나의 회원가입정보가 잘 들어갔는지 확인하자

Php 로그인 DB 연동 - Php logeu-in DB yeondong

회원가입이 잘 되었다

참고로 비밀번호는 md5로 암호화 시켜서 데이터베이스 관리자들도 회원들의 비밀번호를 모르게 한것이다

과거글 참고 ㄱ

Php 로그인 DB 연동 - Php logeu-in DB yeondong

Php 로그인 DB 연동 - Php logeu-in DB yeondong

Php 로그인 DB 연동 - Php logeu-in DB yeondong

아이디나 비밀번호의 내용을 잘못 입력했을 때

Php 로그인 DB 연동 - Php logeu-in DB yeondong

Php 로그인 DB 연동 - Php logeu-in DB yeondong

가입할때 쓴 닉네임 + 님 안녕하세요 라는 문구와

로그아웃 버튼이 뜬다

Php 로그인 DB 연동 - Php logeu-in DB yeondong

로그아웃을버튼을 누르면 로그아웃된후

다시 맨 처음페이지로 돌

Php 로그인 DB 연동 - Php logeu-in DB yeondong

아온다

이제 코드를 살펴보자

사용된 파일은 총 7개인데

저번에 회원가입 기능을 구현할때 사용한게 3개이므로

우리는 4개만(그 중 신경써야할 부분은 2개 밖에없다 저번보다 훨씬 나음) 하면된다

Main Page

login_joinus.html

Php 로그인 DB 연동 - Php logeu-in DB yeondong

이 친구다 딱봐도 완전 별거없다 솔직히 이건 안하고싶은 사람은 안해도되는데

로그인 버튼은 모두에게 필요하지...

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Login and Join us</title> </head> <body> <form name="test1" method="POST"> <h2>Test</h2> <input type="button" value="LOGIN" onclick="sub(1)"> //로그인 버튼을 누르면 sub(1)함수 실행 <input type="button" value="JOINUS" onclick="sub(2)"> //JOINUS 버튼을 누르면 sub(2)함수 실행 </form> <script = "text/javascript"> function sub(index){ if(index == 1){ document.test1.action="LOGIN_PAGE.php"; //sub(1)은 로그인 기능을 하는 php로 연결 } if(index == 2){ document.test1.action="JOINUS_FINAL.html"; //sub(2)은 회원가입 기능을 하는 php로 연결 } document.test1.submit(); } </script> </body> </html>

한페이지에 서로다른 페이지로 전송되는 두가지 버튼이 붙어있을 때 쓰는 멀티 어쩌구방법이다

함수하나를 만들어 인덱스를 따로두고 인덱스에따라 다른 페이지를 열게하는 방식이다

sub(2)의 JOINUS_FINAL.html은 회원가입 버튼인데 그건 전글을 참고하고

우리는 이제 회원가입 기능을 하는 LOGIN_PAGE.php를 만들어보자

사실 이친구는 두가지 기능을 하는 친구다

로그인을 하고나면

ㅇㅇㅇ님 안녕하세요

로그아웃버튼

Php 로그인 DB 연동 - Php logeu-in DB yeondong

로그인을 하기전엔

로그인창을 띄우는 친구다

근데 일단 로그인 창을 띄우는 것부터 하자

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Join Us</title> </head> <body> <form name="login" method="post" action='login_action.php'> <h2>LOGIN</h2> <table border="1"> <tr> <td>ID</td> <td><input type="text" size="30" name="ID"></td> </tr> <tr> <td>PASSWORD</td> <td><input type="password" size="30" name="PASSWORD"></td> </tr> </table> <input type="submit" value="INSERT"><input type=reset value="REWRITE"> </form> </body> </html>

Php 로그인 DB 연동 - Php logeu-in DB yeondong

이걸 실행하면 이렇게 뜬다

유심히 봐야할 부분은

<form name="login" method="post" action='login_action.php'> //이친구와 <input type="submit" value="INSERT"> //이친구

별거없다 INSERT 라고 써있는 버튼은 submit기능을 하는 버튼인데

submit하는 법은 post방식이고 (get방식도잇음? 아마) login_action.php 라는 php로

내가 텍스트 박스에 쓴 애들을 post방식으로 submit 한다는 의미다

그러면 이제 login_action.php 이친구도 만들어야한다는 뜻...

데이터베이스에서 내가 입력한 아이디와 비번을 검사해 맞는지 검사하는 그친구

login_action.php

여기서 새로 알아야할 개념은 바로

"SESSION"

솔직히 자세히 모른다

대충 내가 알아보고 궁예한 바로는 php같은 웹 이 친구들은

한 페이지가 끝나면 정보가 모두 사라져버린다.

로그인을 마쳤는데 로그인이 되었습니다. 라고 뜨는 순간 정보가사라져서 로그인이 안된상태가 된다는 의미다.

약간 자바나 씨언어의 지역변수같은 느낌이다

지역변수도 함수가 끝나는 동시에 사라지듯이... php파일에 쓴 변수들도 그 파일을 넘기는 순간 사라지는것

그래서 그 변수들보다 더 큰개념인 session의 개념을 도입했다

새션을 시작하고나서

session_start();

생성한 새션변수들은 ( $_SESSION['(변수명)']=대입할값 ) 이런식인듯

session_destroy();

새션이 끝날때까지 사라지지 않는다

session_start(); //새션 시작시키기 $_SESSION['(변수명)']=대입할값 // 새션변수 생성 session_destroy();//새션 종료시키기 -> 그동안 생성한 새션변수가 모두 사라짐

그리고 이건 팁인데 mac만 그러는지 모르겠는데

session_start()를 여러페이지에 실행하면

PHP SESSION HEADERS ALREADY SENT 어쩌구.. 이렇게 나온다

그럴때는 session_start()앞에 골뱅이를 붙여주면된다

<tmi : @를 골뱅이라고 이름지은 사람 우리 컴퓨터구조 교수임 >

이렇게하면 사이트가 좀 느려진다는데 오류나는거보단 낫지 뭐요...

알아야 할 함수

$connect = mysqli_connect("127.0.0.1","root","","LoginTest"); //데이터베이스와 php를 연동하는 함수 mysqli_connect(localhost , ID, PASSWORD, DATABASE_NAME) $result = mysqli_query($connect,$query); //데이터베이스에 명령을 수행하는 함수 query에 저장된 명령을 connect에 연결된 데이터베이스에서 실행하여 result에 결과 저장 mysqli_num_rows($result) //result에 저장된 결과가 몆줄인지 $row=mysqli_fetch_assoc($result); // assoc : 연관 배열이라는 의미이다 데이터베이스에 저장한 테이블의 칼럼은 배열처럼 저장되어있다 나는 Users 테이블에 ID, PASSWORD, NICKNAME 칼럼을 가지고 있다 이런식으로 row라는 변수에 저값을 저장해두면. $row['ID'] 로 그 배열의 아이디에 접근 할 수 있다 isset($_SESSION['ID']) //isset(세션변수명) : 세션변수가 정의되어있는지 확인한다

이제 본격적으로 코드를 좀 보면..

1. 새션을 시작시킨다

2. 데베와 연결한다

3. 아이디가 있는지 검사

4. 그 아이디와 비번이 맞는건지 검사

진짜 여기서 주의해야하고 개같은점은 <?php .... ?> 이 십새끼들은 스크립트기능이 없나보다

스크립트가 안에 들어가거나 html내용이 안에들어나면 오류나서 적절히 끊어준다;

<?php @session_start(); $connect = mysqli_connect("127.0.0.1","root","","LoginTest"); //로그인창에서 post로 보낸 id와 password받기 $ID=$_POST['ID']; $PASSWORD=$_POST['PASSWORD']; //이런문자들은 헷갈리니까 걍 다 통일해주는게 좋음 //아이디가 있는지 검사 $query = "select * from Users where ID='$ID'"; //Users의 ID칼럼에서 $ID(내가 텍스트 필드에 입력한 아이디와 같은 친구를 부르는 명령) $result = mysqli_query($connect,$query); // 나의 데이터 베이스에서 query에 저장된 명령을 실행하는 함수 //result에 1줄이 있다면 내가 입력한 아이디와 같은 애가 데이터베이스 ID칼럼에 하나 존재한다는 의미 if(mysqli_num_rows($result)==1) { $row=mysqli_fetch_assoc($result); //row에 입력한 ID가 세트로 있는 배열 ID-PASSWORD-NICKNAME 세트를 가져온다 $NICKNAME=$row['NICKNAME']; //닉네임이라는 변수를 만들어서 ID와 세트인 닉네임을 대입 $_SESSION['NICKNAME']=$NICKNAME;//세션변수 NICKNAME에 변수닉네임을 대입 //비밀번호가 맞는지 검사 -> 데이터베이스에 md5로 암호화해서 저장했으므로 암호화한게 같은지 봐야한다 if($row['PASSWORD']==md5($PASSWORD)){ //ID와 세트인 PASSWORD가 입력된 비밀번호와같으면 $_SESSION['ID']=$ID; //세션변수 ID를 생성해 거기에 입력한 아이디를 저장 -> 저장되었다는 것은 비밀번호가 맞다는의미 if(isset($_SESSION['ID'])){ //새션 아이디가 정의되었다면 ?> <script> alert("로그인 되었습니다."); //로그인 되었습니다를 띄우고 location.replace("./LOGIN_PAGE.php"); //LOGIN_PAGE.php로 돌아감 </script> <?php } else{ echo "session fail"; //세션아이디가 정의되지 않았음 } } else { // ID와 세트인 PASSWORD가 입력된 비밀번호와 같지 않음 ?> <script> alert("아이디 혹은 비밀번호가 잘못되었습니다."); //비밀번호와 아이디가 맞지않음 history.back(); //이전페이지로 돌아가기 </script> <?php } } else{ ?> <script> alert("아이디 혹은 비밀번호가 잘못되었습니다.");//아이디가 존재하지않음 history.back(); </script> <?php } ?>

이 코드를 보면

location.replace("./LOGIN_PAGE.php");

로그인 페이지 <-여기로 다시 돌아가는 코드가 있다

이제 로그인 페이지를 다시 손보자

LOGIN_PAGE.php 다시 손보기

LOGIN_PAGE.php

Php 로그인 DB 연동 - Php logeu-in DB yeondong

이 친구를 할 차례

if문을 사용해서 로그인이되었다면

이 창을

로그인이 되지 않았다면

Php 로그인 DB 연동 - Php logeu-in DB yeondong

이창을 띄우기로하자

데이터베이스에서 php와 연동하여 로그인이되었는지 확인한 후에 한 것이므로

데이터베이스와 연동이 또 필요하다

<?php $connect = mysqli_connect("127.0.0.1","root","54321","LoginTest"); @session_start(); //데이터 베이스와 연동해주고 + 세션을 시작해준다 if(isset($_SESSION['ID'])) { // 전섹션에서 아이디가 정의되었으면 로그인완료였으므로 여기서도 아디가 정의되어 있는지 확인한다 echo $_SESSION['NICKNAME'];?>님 안녕하세요. //세션닉네임은 전 php에서 정의해주었다 <input type="submit" value="LOGOUT" onclick='location.replace("./logout_action.php")'> //그리고 로그아웃버튼을 생성하여 logout_action.php로 이동시키자

<?php $connect = mysqli_connect("127.0.0.1","root","54321","LoginTest"); @session_start(); if(isset($_SESSION['ID'])) { echo $_SESSION['NICKNAME'];?>님 안녕하세요 <br/> <input type="submit" value="LOGOUT" onclick='location.replace("./logout_action.php")'> <?php } else { //정의되어있지 않으면 아직 로그인하지 않은 것이므로 아까 html로그인창을 여기넣어준다 ?> //html코드는 php안에 넣으면 오류나서 닫아주고한다 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Join Us</title> </head> <body> <form name="login" method="post" action='login_action.php'> <h2>LOGIN</h2> <table border="1"> <tr> <td>ID</td> <td><input type="text" size="30" name="ID"></td> </tr> <tr> <td>PASSWORD</td> <td><input type="password" size="30" name="PASSWORD"></td> </tr> </table> <input type="submit" value="INSERT"><input type=reset value="REWRITE"> </form> <br /> <?php } // else문을 닫아줌 ?> </body> </html>

<?php @session_start(); $result = session_destroy(); //세션을 닫아준다 if($result) { //세션닫기에 성공하면 ?> <script> alert("로그아웃 되었습니다."); location.replace("./login_joinus.html"); //다시 처음 페이지로 돌아간다 </script> <?php } ?>

이제 끝... 아 개같이 하기싫다

로그인 로그아웃 회원가입

회원가입할때 비밀번호 두번입력하게하기

닉네임/비밀번호 변경하기

탈퇴하기

하고싶은데 이건좀.. 시간이 나면하겠다 게시판도 만들어야하고 할거개많음