출처:http://i1.wp.com/www.traininginchennai.co.in/wp-content/uploads/2015/12/php-training-in-chennai.jpg

저번주에는 코드를 이해하고 짜느라 로그인 페이지를 만들지 못했는데 어제 드디어 완성했다.

기본적인 코드는 https://choco4study.tistory.com/3 이 블로그를 따라 만들었고

아직 대부분의 코드는 보고 따라한 수준이라.. 후에 직접 코드를 짜서 올리겠다. 

홈페이지의 큰 틀은 

index.php(메인 페이지)

login.php로그인 페이지)

login_ok.php(로그인 확인 페이지)

join.php(회원가입 페이지)

join_php(회원가입 승인 페이지)

이렇게 구성된다. 물론 모든 페이지 간 연동은 되어있다.

모든 코드는 설명을 추가하겠다. 조금이라도 이해 안되면 댓글 달아주길 바랍니다~~

 

index.php (나는 main이 아닌 index라는 이름으로 사용함)

<!doctype html> 
<?php session_start(); ?> //session을 시작한다는 의미는 session에 값을 넣으면 서버에 저장된다는 의미
						  // 단 서버에 저장하기 위해서는 <?php 문 사이에 코드를 넣어야한다.
<html lang="kr">
<head>

    
    <link rel="stylesheet" href="./style.css"> //이건 사이트의 스타일을 지정하는것
    <meta charset = "utf-8">
    <title> 해킹사이트 </title> 
</head>

<body>
    <h1>메인페이지</h1>
	//아래 코드는 session['user_id]에 값이 존재한다는 것은 로그인이 되어 있다는 뜻이기 때문에
    // 이를 if 문에 넣어 로그인된 유저 정보가 있으면 환ㅇ 없으면 로그인하는 창(login.php)으로 이동한다는 의미이다.
    <?php 
        if(isset($_session['user_id']) || isset($_session['user_name'])) {
            $user_id = $_session['user_id'];
            $user_name = $_session['user_name'];
            echo "<p>$user_name($user_id)님 환영합니다.</p>";
            echo "<p><button onclick=\"location.href='logout.php'\">로그아웃</button></p>";

        } else {
        	//만약 false시 로그인을 필요로 하는 문구를 넣고 login.php로 이동하여 로그인을 진행하도록함
            echo "<p> 로그인이 필요합니다.</p><br>";
            echo "<p><button onclick=\"window.location.href='login.php'\">로그인</button> <button onclick=\"window.location.href='join.php'\">회원 가입 </button></p>";
        }
    ?>
    //보게되면 서버와 소통하는 부분은 <?php ?>로 묶이게 된다 이 괄호가 없으면 서버와 소통을 못해서 제대로 된 값이 나오지 않는다.
    
</body>
</html>

login.php

<!DOCTYPE html>
<html lang="kr">
    <?php session_start(); ?> '/session이 필요한 페이지는 start를 해주어야한다.
    <head>
	<link rel="stylesheet" href="./style.css">
	<meta charset="utf-8">
        <title>로그인 페이지</title>
    </head>
    <body>
    //보면 if문의 참거짓 뒤에 참이면 실행될 코드와 거짓이면 실행될 코드를 구분하는 {를 <?php로 묶은것을 볼 수 있다.
    //서버와 소통후 다음 코드 부분에서는 서버가 아닌 클라이언트에서 실행되는 부분이라 {를 ?> 뒤에 붙이게 되면
    //페이지에 {를 출력하는 형태가 된다. 그렇기 때문에 특수문자까지 php에서 실행되도록해야한다.
        <?php if(!isset($_SESSION['user_id']) || !isset($_SESSION['user_name'])) { ?>
            <form method='post' action="login_ok.php" autocomplete="off"> 
                <p>로그인</p></br>
                //placeholder는 입력 박스안에 간단히 무엇을 적어야하는지 적어주는 것으로 값을 넣으면 사라진다.
                //type은 텍스트 형식 그리고 입력된 값은 user_id에 저장되고 최대 입력은 50까지 받는 다는 의미
                <p><input type = "text" name='user_id' placeholder="아이디" maxlength="50"  /><p>
		<p><input type = "password" name='user_pw' placeholder="비밀번호" maxlength="50" /></p>
		//아래 줄은 로그인이라는 제출 버튼을 만드는 코드
		<input type="submit" value="로그인" >
        //<a는 하이퍼링크로 다른 페이지와 연결을 해주는 역할을 한다. 다만 형태가 버튼 형식이 아닌
        // 글자를 클릭하면 넘어가는 형태라 만약 버튼으로 만들고 싶으면 location.replace나 location.href를 사용하여 만들면 됨
		<small><a href="index.php">메인으로</a></small>
            </form>
        <?php } else {
             //session에 값이 있다는 것은 로그인이 되었다는 의미이기에 아래 코드 실행
            $user_id = $_SESSION['user_id'];
            $user_name = $_SESSION['user_name'];
            echo "<p>$user_name($user_id)님은 이미 로그인되어 있습니다.";
            echo "<p><button onclick=\"window.location.href='index.php'\">메인으로</button> <button onclick=\"window.location.href='logout.php'\">로그아웃</button></p>";
        } ?>
    </body>
</html>

login_ok.php

//login.php에서 user_id와 user_pw를 post방식으로 넣어줬기 때문에 서버에서 이를 비교하여 해당 값이
//데이터베이스에 있는지 판별하는 작업만 하면 로그인 확인이 끝이 난다. 어차피 모두 서버에서 작동하기 때문에
//전체를 php로 묶음
<?php
	//post 방식으로 받아서 user_id라는 변수에 넣겠다는 의미
    $user_id = $_POST['user_id'];
    $user_pw = $_POST['user_pw'];
    //아래 코드는 connect의 뜻으로 내가 가진 데이타베이스를 접근하기 위해 정보를 입력하는 칸
    // 순서는 (내 address, 계정이름, 비밀번호,접근할 데이타베이스) 순이다. mysql의 계정 값을 넣어줘야함
    $conn = mysqli_connect('localhost', 'root', 'aa', 'logindb');
    // sql은 내가 요청할 자료이다 필요한 건 id와 pw이기 때문에 login이라는 table에서 id pw의 모든 자료를 가져온다.
    $sql = "SELECT * FROM login where login_id='$user_id' and login_pw='$user_pw'";
    //mysqli_query는 요청이라는 의미로 위 설명한 계정정보와 무엇을 요청할것인지를 실행하여 입력한 로그인 정보와 일치하는 값을 가져오는데
    //fetch_array라는 형태의 배열로 값을 가져오게 된다. 이 형태는 각 행 [0], [1]에 순차적으로 값이 들어가 있다
    $res = mysqli_fetch_array(mysqli_query($conn,$sql));
    //res 변수에 값이 있다는 것은 로그인 정보와 일치하는 데이터가 있다는 의미로 일치시 로그인에 성공했다는 창을 띄운다. 
    if($res){
        session_start();
        $_SESSION['user_id'] = $res['login_id'];
        $_SESSION['user_name'] = $res['name'];
        echo "<script>alert('로그인에 성공했습니다!');";
        echo "window.location.replace('index.php');</script>";
        exit;
    }
    else{
    // 값이 없으면 다시 login 페이지로 이동
       echo "<script>alert('아이디 혹은 비밀번호가 잘못되었습니다.');";
       echo "window.location.replace('login.php');</script>";
    }
?>
<meta http-equiv="refresh" content="0;url=index.php">

아래 코드는 mysql의 계정 정보와 데이터 베이스가 연결이 되는지 테스트 하는 것으로  작성한 코드가 데이터베이스와 내가 연결이 안된다 하면 아래 코드로 한번 연결을 확인해 보고 다시 진행하길 바란다.

<?php
   $db_host="localhost";	//DB서버 주소를 입력
   $db_user="root";	//접속할 ID
   $db_password="aa";	// 접속할 ID의 패스워드
   $db_name="logindb";	// 특별히 사용할 DB가 있다면 DB명을 넣음
   $con=mysqli_connect($db_host, $db_user, $db_password, $db_name);	// 변수 $con에 db접속 내장함수와 (인자값 들)을 저장
   if ( mysqli_connect_error($con) ) {	// DB접속 했을 때 오류가 발생한다면
	   echo "MariaDB 접속 실패 !!", "<br>";	// 출력
	   echo "오류 원인 : ", mysqli_connect_error();	// mysqli_connet_error() 내장함수는 DB서버 연결 오류 원인을 반환해주는 함수
	   exit();
   }
   echo "MariaDB 접속 완전히 성공!!";	// 에러가 없을 시 출력
   mysqli_close($con);	// DB 접속 종료
?>

join.php

<!DOCTYPE html>
<?php session_start(); ?>
<html lang="kr">
    <head>
		
	 <link rel="stylesheet" href="./style.css">
	 <meta charset="UTF-8">
	 <title>Join</title>
    </head>
    <body>
        <h2>회원가입</h2>
        <?php if(!isset($_SESSION['user_id']) || !isset($_SESSION['user_name'])) { ?>
        <form method="post" action="join_ok.php" autocomplete="off">
            <p><input type="text" name="join_name" placeholder="Name"required></p>
            <p><input type="text" name="join_id" placeholder="ID"required></p>
            <p><input type="password" name="join_pw" placeholder="password" required></p>
            <p><input type="submit" value="가입하기"></p>
        </form>
        <small><a href="login.php">이미 회원이신가요?</a></small>
        <?php } else {
                $user_id = $_SESSION['user_id'];
                $user_name = $_SESSION['user_name'];
                echo "<p>$user_name($user_id)님은 이미 로그인되어 있습니다.";
                echo "<p><button onclick=\"window.location.href='main.php'\">메인으로</button> <button onclick=\"window.location.href='logout.php'\">로그아웃</button></p>";
        } ?>
    </body>
</html>

join_ok.php

 

<?php
    if (!isset($_POST['join_name']) || !isset($_POST['join_id']) || !isset($_POST['join_pw'])) {
        header("Content-type: text/html; charset=UTF-8");
        echo "<script>alert('기입하지 않은 정보가 있거나 잘못된 접근입니다.')";
        echo "window.location.replace('join.php');</script>";
        exit;
    }
    $join_name = $_POST['join_name'];
    $join_id = $_POST['join_id'];
    $join_pw = $_POST['join_pw'];
    $conn= mysqli_connect('localhost', 'root', 'aa', 'logindb');
    //신규 회원정보 삽입 + ID 재정렬
    $multi = "
        INSERT INTO login(login_id, login_pw, name) VALUES ('{$join_id}', '{$join_pw}','{$join_name}');
        SET @COUNT = 0;
        UPDATE member SET id = @COUNT:=@COUNT+1;
    ";
    //login_ok.php와 동일한 내용
    $res = mysqli_multi_query($conn,$multi);
    if($res){
        echo "<script>alert('회원가입이 완료되었습니다.');";
        echo "window.location.replace('login.php');</script>";
        exit;
    }
    else{
       echo "<script>alert('저장에 문제가 생겼습니다. 관리자에게 문의해주세요.');";
       echo mysqli_error($conn);
    }
?>
//새로고침 후 contetn가 0 이면 main.php로 이동한다는 의미
<meta http-equiv="refresh" content="0;url=main.php">

'Web > Web 개발' 카테고리의 다른 글

[php] 언어 정리  (0) 2022.04.19
JS, php언어 공부  (0) 2022.04.18
Hash 란?  (0) 2022.04.05
[web] mysql database 및 table 만들기  (0) 2022.03.31
web 로그인 페이지 만들기 프로젝트 1  (0) 2022.03.30

현재 kali linux에서는 mysql 사용이 안되고 mariadb로만 사용이 가능하다. mariadb설치시 내에서 사용되는 코드는 mysql과 거의 동일하니 설치만 mariadb로 하면 된다.

 

우리가 만약 로그인 페이지를 만든다면 로그인시 필요한 데이타베이스가 있을터인데 이 데이타베이스는 우리가 직접 만들어줘야한다.

 

만드는 과정은

mariadb를 설치하였다면 아래 코드를 이용하여 만들면 된다. (mysql에서는 모든 명령어 뒤에 ; 붙어야 실행됨

mariadb -u root
#비밀번호 아무거나 쳐도 된다. 상위버젼부터는
#root 계정으로 리눅스 접속시 자동으로 root 계정으로 마리아도 접속됨

create database 데이터명;
use 데이터명
create table 테이블명(
'login_id" VARCHAR(40) NOT NULL,
'login_pw" VARCHAR(40) NOT NULL);

desc login; # 만든 login_id,login_pw가 보이게 된다.

 

만약 자료를 넣고싶다하면 순서대로 aa라는 값이 id 와 pw에 들어가게 된다.

insert into login value("aa", "aa");

select * from login;

이런식으로 database를 만들어 페이지와 연동시키면 된다,

'Web > Web 개발' 카테고리의 다른 글

[php] 언어 정리  (0) 2022.04.19
JS, php언어 공부  (0) 2022.04.18
Hash 란?  (0) 2022.04.05
php 를 이용한 로그인 페이지 만들기  (0) 2022.04.03
web 로그인 페이지 만들기 프로젝트 1  (0) 2022.03.30

Session이란?

세션이란 쿠키와 달리 보안성이 더 높은 정보 저장 방법이다. 쿠키는 컴퓨터 내에 사용자가 사용했던 웹페이지의 로그인 정보 및 파일 정보를 저장하는데 그와 달리 세션은 서버에 정보를 저장한다. 세션이라 함은 사용자가 브라우저를 접속하고 끝내는 지점까지를 세션이라하는데 사용이 끝나는 시점까지 정보들을 서버에 저장 후 접속을 종료시 접속한 컴퓨터에 세션 키 값만을 나두고 서버에 저장 후 종료를 하게된다. 다시 해당 컴퓨터가 접속하면 그 컴퓨터는 세션 키를 가지고 있기 때문에 서버에 있는 데이터를 가져와 사용이 가능하게되는 것이다.

 

페이지 이동하기

만약 웹페이지를 만든다고 가정한다면 그 페이지에는 수많은 페이지가 숨어져 있다. 로그인 버튼을 누르면 나오는 페이지 회원가입을 하면 나오는 페이지등을 생각하시면 쉬울 것이다. 만약 그렇다면 어떠한 코드가 페이지를 이동할 때 주로 사용될까?

가장 많이 사용 되는 코드는 a 태그이다.  anchor로 닻의 약자로 단어 그 자체로 다른 페이지를 닻으로 연결하여 연결시키는 것이다.

보통 <a href="http://주소">이동하기</a> 이런식으로 사용되는데 href는 hypertext reference의 약자로 연결한 주소를 지정하는 속성이다. "이동하기"라는 것은 페이지에 이동하기를 클릭 시 해당 연결 주소로 이동하기 위해 적어놓은 것이다.

연결 방식은 2가지가 더 존재한다.

a 태그를 이용하는 것이 아닌 location.href와 location.replace를 이용하는 것이다.

이 둘을 이용하는 목적은 우리가 클릭을 해야하는 형태가 버튼 형식이거나 글자 형식 일 수 있기 때문에 클릭 하는 대상의 형태를 원하는 걸로 하기 위해 위 둘을 사용하는 것이다. location.href와 locarion.replace의 차이점은 기록이 남냐 안남냐의 차이이다. 만약 a-b-c 이렇게 연결시 a를 클릭시 자동으로 b로 연결되고 c로 연결된다고 생각해보면 우리가 실제로 보는 웹페이지는 a클릭시 c로 이동하는 것만 보일 것이다. 하지만 웹페이지 내에서는 중간 과정이 저장되기 때문에 뒤로가기 하면 b라는 페이지로 넘어가게 된다. 중간 과정을 저장하는 것이 location.href 저장 하지 않는 것은 location.replace이다. 만약 replace를 사용시 뒤로가기하면 c에서 b로 이동하는 것이 아닌 a로 바로 이동하게 된다. b라는 과정을 저장하지 않기 때문에 보여지지 않는 것이다. 그와 반대로 href사용시 b라는 페이지가 보이게 된다.

 

 

'Web > Web 개발' 카테고리의 다른 글

[php] 언어 정리  (0) 2022.04.19
JS, php언어 공부  (0) 2022.04.18
Hash 란?  (0) 2022.04.05
php 를 이용한 로그인 페이지 만들기  (0) 2022.04.03
[web] mysql database 및 table 만들기  (0) 2022.03.31

+ Recent posts