티스토리 뷰

728x90
반응형

Login-registration-System-PHP-and-MYSQL-master.zip
0.01MB

스터디 하면서 과제로  PHP 로 로그인 페이지 만들기 와 회원가입 페이지 만들기 이다

소스 는 유튜브에 서 퍼다가 필요한 부분만 연습할때 수정하고

아래 소스 코드는 배포판 원본이다.

index.php 파일이다
<!DOCTYPE html>
<html>
<head>
	<title>로그인</title>
	<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
     <form action="login.php" method="post">
     	<h2>LOGIN</h2>
     	<?php if (isset($_GET['error'])) { ?>
     		<p class="error"><?php echo $_GET['error']; ?></p>
     	<?php } ?>
     	<label>User Name</label>
     	<input type="text" name="uname" placeholder="User Name"><br>

     	<label>Password</label>
     	<input type="password" name="password" placeholder="Password"><br>

     	<button type="submit">로그인</button>
          <a href="signup.php" class="ca">회원 가입</a>
     </form>
</body>
</html>

두개의 input 으로 입력을 받고 'name' , 'password' 로 입력값을 받아온다

     	<input type="text" name="uname" placeholder="User Name"><br>
     	<input type="password" name="password" placeholder="Password"><br>
DB 연결 페이지 
 db_conn.php
<?php
$sname= "192.168.0.16";
$uname= "dbuser";
$password="암호암호";

$db_name = "dbtest";

$conn = mysqli_connect($sname, $uname, $password, $db_name);

if (!$conn){
    echo("Connection failed!");

}
?>

DB 서버 IP , 계정 , 암호 지정해주고 사용할 DB 명을 넣어 줬다 실패시 echo로 "Connection failed!" 가 나오게 했다

index.php 안에 들어갈 login.php 파일 

login.php 
<?php 
session_start(); 
include "db_conn.php";

if (isset($_POST['uname']) && isset($_POST['password'])) {

	function validate($data){
       $data = trim($data);
	   $data = stripslashes($data);
	   $data = htmlspecialchars($data);
	   return $data;
	}

	$uname = validate($_POST['uname']);
	$pass = validate($_POST['password']);

	if (empty($uname)) {
		header("Location: index.php?error=User Name is required");
	    exit();
	}else if(empty($pass)){
        header("Location: index.php?error=Password is required");
	    exit();
	}else{
		// hashing the password
        $pass = md5($pass);

        

		$sql = "SELECT * FROM users WHERE user_name='$uname' AND password='$pass'";

		$result = mysqli_query($conn, $sql);

		if (mysqli_num_rows($result) === 1) {
			$row = mysqli_fetch_assoc($result);
            if ($row['user_name'] === $uname && $row['password'] === $pass) {
            	$_SESSION['user_name'] = $row['user_name'];
            	$_SESSION['name'] = $row['name'];
            	$_SESSION['id'] = $row['id'];
            	header("Location: home.php");
		        exit();
            }else{
				header("Location: index.php?error=계정명 또는 암호가 틀렸다");
		        exit();
			}
		}else{
			header("Location: index.php?error= 계정명 또는 암호가 틀렸다");
	        exit();
		}
	}
	
}else{
	header("Location: index.php");
	exit();
}

상당히 복잡해 보이지만 IF 문을 잘 따라 가보면 그냥 계정명 과 암호가 맞는 지 비교해서 틀리면 틀렸다고 나오는 문장이다

회원가입 페이지
signup.php
<!DOCTYPE html>
<html>
<head>
	<title>회원가입</title>
	<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
     <form action="signup-check.php" method="post">
     	<h2>SIGN UP</h2>
     	<?php if (isset($_GET['error'])) { ?>
     		<p class="error"><?php echo $_GET['error']; ?></p>
     	<?php } ?>

          <?php if (isset($_GET['success'])) { ?>
               <p class="success"><?php echo $_GET['success']; ?></p>
          <?php } ?>

          <label>Name</label>
          <?php if (isset($_GET['name'])) { ?>
               <input type="text" 
                      name="name" 
                      placeholder="Name"
                      value="<?php echo $_GET['name']; ?>"><br>
          <?php }else{ ?>
               <input type="text" 
                      name="name" 
                      placeholder="Name"><br>
          <?php }?>

          <label>User Name</label>
          <?php if (isset($_GET['uname'])) { ?>
               <input type="text" 
                      name="uname" 
                      placeholder="User Name"
                      value="<?php echo $_GET['uname']; ?>"><br>
          <?php }else{ ?>
               <input type="text" 
                      name="uname" 
                      placeholder="User Name"><br>
          <?php }?>


     	<label>Password</label>
     	<input type="password" 
                 name="password" 
                 placeholder="Password"><br>

          <label>Re Password</label>
          <input type="password" 
                 name="re_password" 
                 placeholder="Re_Password"><br>

     	<button type="submit">Sign Up</button>
          <a href="index.php" class="ca">이미 가입 되어 있으신가요?</a>
     </form>
</body>
</html>

 

Sign Up 을 클릭 하면 발동할 내부 페이지

signup-check.php
<?php 
session_start(); 
include "db_conn.php";

if (isset($_POST['uname']) && isset($_POST['password'])
    && isset($_POST['name']) && isset($_POST['re_password'])) {

	function validate($data){
       $data = trim($data);
	   $data = stripslashes($data);
	   $data = htmlspecialchars($data);
	   return $data;
	}

	$uname = validate($_POST['uname']);
	$pass = validate($_POST['password']);

	$re_pass = validate($_POST['re_password']);
	$name = validate($_POST['name']);

	$user_data = 'uname='. $uname. '&name='. $name;


	if (empty($uname)) {
		header("Location: signup.php?error=User Name is required&$user_data");
	    exit();
	}else if(empty($pass)){
        header("Location: signup.php?error=Password is required&$user_data");
	    exit();
	}
	else if(empty($re_pass)){
        header("Location: signup.php?error=Re Password is required&$user_data");
	    exit();
	}

	else if(empty($name)){
        header("Location: signup.php?error=Name is required&$user_data");
	    exit();
	}

	else if($pass !== $re_pass){
        header("Location: signup.php?error=The confirmation password  does not match&$user_data");
	    exit();
	}

	else{

		// hashing the password
        $pass = md5($pass);

	    $sql = "SELECT * FROM users WHERE user_name='$uname' ";
		$result = mysqli_query($conn, $sql);

		if (mysqli_num_rows($result) > 0) {
			header("Location: signup.php?error=The username is taken try another&$user_data");
	        exit();
		}else {
           $sql2 = "INSERT INTO users(user_name, password, name) VALUES('$uname', '$pass', '$name')";
           $result2 = mysqli_query($conn, $sql2);
           if ($result2) {
           	 header("Location: signup.php?success=회원 가입이 완료 되었다");
	         exit();
           }else {
	           	header("Location: signup.php?error=알수 없는 에러가 발생 했다&$user_data");
		        exit();
           }
		}
	}
	
}else{
	header("Location: signup.php");
	exit();
}

여기도 내용이 길지만 역시 비교문이 많아 길은것일 뿐이고

중요한부분은 

// hashing the password
        $pass = md5($pass);

	    $sql = "SELECT * FROM users WHERE user_name='$uname' ";
		$result = mysqli_query($conn, $sql);

		if (mysqli_num_rows($result) > 0) {
			header("Location: signup.php?error=The username is taken try another&$user_data");
	        exit();
		}else {
           $sql2 = "INSERT INTO users(user_name, password, name) VALUES('$uname', '$pass', '$name')";
           $result2 = mysqli_query($conn, $sql2);

$pass = md5($pass) << 이부분은 입력 받은 암호를 md5 암호화 하는 것

소스 코드를 받아다가 수정 할때 안되는 경우가 종종 있는데

그건 본인 DB 에 테이블 과 컬럼명이 일치 하지 않은 경우가 많다

소스 코드 일일이 타이핑 하지마라 오타나고 if 문에서 괄호 하나 잘못 닫으면 한참 해메야 한다

* 첨부로 올릴테니 그거 다운 받아 웹서버에 올려라 *

 

로그인 성공 페이지
home.php

 

<?php 
session_start();

if (isset($_SESSION['id']) && isset($_SESSION['user_name'])) {

 ?>
<!DOCTYPE html>
<html>
<head>
	<title>HOME</title>
	<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
     <h1>Hello, <?php echo $_SESSION['name']; ?></h1>
     <a href="logout.php">Logout</a>
</body>
</html>

<?php 
}else{
     header("Location: index.php");
     exit();
}
 ?>

여기서 짚고 넘어아 가야 할 부분인데 session_start(); 이부분인다 세션을 열어 isset 문으로 값이 들어 왔는지 확인 한다.

echo $_session['name']; 는 세션 변수  name 을 출력 해주는 것

 

 

 

로그아웃 페이지
logout.php
<?php 
session_start();

session_unset();
session_destroy();

header("Location: index.php");

 

출처 

 

유튜브 

728x90
반응형
댓글