티스토리 뷰
728x90
반응형
스터디 하면서 과제로 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
반응형
'Development' 카테고리의 다른 글
CSS 배경색 그라데이션 넣기 (0) | 2021.11.04 |
---|---|
HTML 가운데 정렬 때문에 고생....(문제해결) (0) | 2021.11.04 |
php header 리디렉션 안됨....(해결함) (0) | 2021.11.02 |
[PHP , DB ] Session 연결 하기(1) (0) | 2021.10.18 |
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 리눅스 명령어
- Grootsecurity
- PODman기초
- grootsecuriry
- 주소DB만들기
- Rcity CTF
- Rcity 9번
- CTF
- 리눅스 환경변수 지정
- podman
- 7-zip
- 라쿤시티
- Rcityboan.com
- 파이썬기초
- 리눅스 쉘 스크립트
- grootboan
- 쉘 스크립트 기초
- Rcity1번
- 파이썬실습
- rhcsa8 시험문제
- 리눅스
- RCity operation 1
- gzip
- rhcsa8 덤프
- 리눅스본딩
- rhcsa8덤프
- Rcity
- 맨탈훈련
- rhcsa8 기출문제
- rhcsa8
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함